Numeric length validation

时间:2015-11-12 12:09:52

标签: ibm-midrange cobol

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 ?

2 个答案:

答案 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本身,无论如何你都可以用来做这件事。