在COBOL400程序中,我想在屏幕上的数字字段上进行验证,当输入的数字小于10时,将发生错误
问题是当我输入一些数字时,例如12345678
该值将像这样放置在长度为15的数值变量中000000012345678
因此,从第一个不是0的数字开始计数不会一直有效,因为在用户输入0的情况下,例如001234567
有没有一种方法可以在不使用FUNCTION
的情况下做到这一点
下面是一些代码片段。如果我正确理解评论线程,用户的响应来自一个10个字符的字段,所以它不能比这个长,但可能会更短(你想阻止的情况);并且用户的响应被移动到程序中的一个15个字符的数字字段中(response-AS-numeric)。
WORKING-STORAGE SECTION.
01 RESPONSE-AREA.
05 RESPONSE-AS-NUMERIC PIC 9(15).
05 RESPONSE-AS-ALPHANUMERIC
REDEFINES RESPONSE-AS-NUMERIC.
10 FILLER PIC X(5).
10 FIRST-DIGIT PIC X(1).
10 FILLER PIC X(9).
* * *
PROCEDURE DIVISION.
MOVE SCREEN-FIELD TO RESPONSE-AS-NUMERIC
IF FIRST-DIGIT = "0"
reject the user's input
END-IF
简而言之,你只需要检查第一个数字。
这里有一些代码可以让你确定事情是否正常
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个字符长,那么您只需要测试NUMERIC,因为其他一切都可以有效地为您完成。但我不知道你在用什么输入。
COBOL400本身没有任何功能,无论如何都可以用来做这件事。