In a COBOL400 program I want to make a validation on a numeric field, on a screen, that when the entered number is less than 10, an error will occur.
The thing is when I enter some number e.g. 12345678
the value will be placed like this in a numeric variable of 15 length
000000012345678
so counting from the first number which is not 0 will not work all the time because of in case a 0 was entered from the user, e.g. 001234567
Is there a way to do that without using a FUNCTION
?
答案 0 :(得分:1)
这里有一些代码片段可以帮到你。如果我正确理解了注释线程,那么用户的响应来自一个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
简而言之,您只需要检查第一个数字。
答案 1 :(得分:0)
这里有一些代码可以让你判断事情是否正常。
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,因为其他一切都将为你有效地完成。但我不知道你用什么输入。
没有FUNCTION是COBOL400本身,无论如何你都可以用来做这件事。