Ibm midrange 数字长度验证

Ibm midrange 数字长度验证,ibm-midrange,cobol,Ibm Midrange,Cobol,在COBOL400程序中,我想对屏幕上的数字字段进行验证,当输入的数字小于10时,将发生错误。 问题是当我输入一些数字时,例如,12345678 该值将这样放置在长度为15的数字变量中0000000 12345678 因此,从不是0的第一个数字开始计数不会一直起作用,因为如果用户输入了0,例如001234567 有没有一种不用函数就能做到这一点的方法?下面是一些代码片段,可以帮助您继续。如果我正确理解了注释线程,那么用户的响应来自一个10个字符的字段,因此它不能长于该字段,但可能会更短(您想要阻

在COBOL400程序中,我想对屏幕上的数字字段进行验证,当输入的数字小于10时,将发生错误。
问题是当我输入一些数字时,例如,
12345678
该值将这样放置在长度为15的数字变量中

0000000 12345678


因此,从不是0的第一个数字开始计数不会一直起作用,因为如果用户输入了0,例如
001234567



有没有一种不用
函数
就能做到这一点的方法?

下面是一些代码片段,可以帮助您继续。如果我正确理解了注释线程,那么用户的响应来自一个10个字符的字段,因此它不能长于该字段,但可能会更短(您想要阻止的情况);用户的响应被移动到程序中一个15个字符的数字字段中(response-AS-numeric)


简而言之,您只需要检查第一个数字。

这里有一些代码,可以让您确定事情是否正常

05  your-input-field.
    10  first-ten-digits-of-input          PIC 9(10).
    10  FILLER                             PIC X(5).
        88  no-more-than-10-digits         VALUE ZERO.

IF  ( first-ten-digits-of-input NUMERIC )
AND ( no-more-than-10-digits )
    user has entered exactly 10 numeric digts
ELSE
    user has misentered, it is too long, short, or not numeric
END-IF
请记住,我不知道您是如何定义“输入”字段的,我也不知道您在定义输入时有哪些选项。必须将字段定义为“字符”,而不是“数字”。如果您将其定义为数字,则处理输入的任何内容都可能右对齐(字段最右位置的最右数字)和左零填充。对于字符字段,它将左对齐(字段最左侧位置的最左侧数字),并用尾随空格填充字段长度

但是,如果您能够定义一个输入字段,该字段只能包含数字(没有其他内容,没有符号、小数点或任何内容),并且可以定义为左对齐,并且长度仅为10个字符,那么您只需要测试数字,因为其他一切都可以有效地为您完成。但我不知道你用什么来输入


不管怎样,COBOL400本身没有一个函数可以有效地用于执行此操作。

不太确定您要问什么。手册中提供了可供您使用的内部功能的完整列表。但是,为什么不能测试它是否小于10?我需要检查输入的数字是否不小于10长度,并且我不想使用
函数
子句。好的,这更清楚。函数不是子句。没有任何一个单独的函数可以为您做到这一点。所以,是的,你可以不用函数来做,因为你不能用函数来做,它没有很好的定义。这实际上是自相矛盾的。它在屏幕上询问数值字段的
验证,然后询问
,以防用户输入了0
。但如果它是显示文件中的数字字段,则无法判断用户是否输入了前导零。前导零将自动添加,用户输入的字符数不会通知您的程序。如果是10位字段,则无论键入多少位,程序都会看到10位数字。它不能是显示器上的
数字字段
;它必须是一个字符域。如果你的问题很清楚,我们就不会有这样的问题。另外,为什么要将电话号码存储为数字字段?你打算用它做一些计算吗?问题是,用户可以有效地输入前导零。我想是的,现在我重读了这个问题。和所有受访者一样,我不完全理解问题陈述,因为OP没有清楚地解释它。这个想法实际上很好,但是如果数字的第一位数字是0呢?知道这个号码代表一个电话号码,所以我测试了另一个可能的解决方案,如果这个号码小于100000000,如果它小于100000000,那么它就不是一个9位数的号码。如果第一个数字为0,则使用9位数字来解决此问题。
05  your-input-field.
    10  first-ten-digits-of-input          PIC 9(10).
    10  FILLER                             PIC X(5).
        88  no-more-than-10-digits         VALUE ZERO.

IF  ( first-ten-digits-of-input NUMERIC )
AND ( no-more-than-10-digits )
    user has entered exactly 10 numeric digts
ELSE
    user has misentered, it is too long, short, or not numeric
END-IF