1

我正在为我的大学事务处理课程编辑一些源代码。我们正在与 COBOL/CICS 合作,该程序是一个录像带出租系统。我们有一个要进行的更改列表,其中一项让我卡住了(自从我参加 COBOL 课程以来,这是自 2010 年秋季学期以来,所以不幸的是,我比我应该做的要生疏得多)。有一个“客户维护”部分,用户可以在其中添加新客户。新客户的项目之一是邮政编码,就目前而言,它将接受任何输入作为有效输入,但我们需要让它只接受数字值(我知道如何做)以及特定的格式:“12345”、“123456789”或“12345-6789”,并且只能以“12345”或“12345-6789”的形式写入记录。其他任何内容,例如“1234” 或 12345-6' 将导致错误。如何检查这些字段的格式是否正确?

4

4 回答 4

1

由于有效的数据格式是固定的,所以很容易。

05  nice-name-for-zip-code pic x(10).
05  filler redefines nice-name-for-zip-code.
    10  simple-zip-first-part pic x(5).
    10  simple-zip-last-part pic x(5).
        88  simple-zip-last-part-valid value space.
05  filler redefines nice-name-for-zip-code.
    10  complex-zip-first-part pic x(5).
    10  complex-zip-separator pic x.
        88  complex-zip-separator value "-".
    10  complex-zip-last-part pic x(4).
05  filler redefines nice-name-for-zip-code.
    10  long-zip-first-part pic x(9).
    10  long-zip-last-part pic x. 
        88  long-zip-last-part-valid value space.

if ( simple-zip-first-part numeric )
and ( simple-zip-last-part-valid )
    ....

if ( complex-zip-first-part numeric )
and ( complex-zip-separator-valid )
and ( complex-zip-last-part numeric )
    ....

if ( long-zip-first-part numeric )
and ( long-zip-last-part-valid )
    ....

如果任何 IF 为真,则您的格式有效。否则无效。

于 2013-03-26T07:33:27.110 回答
0

您还可以使用 CICS 命令 BIF DEEDIT,它将删除非数字字符,减号通过该测试。之后,测试 5 或 10 的长度。

或者,您可以像这样使用 88:

01 Zip-Validation-Field.
 02 filler pic x(5).
  88 Zip-Valid value '00000' thru '99999'.
 02 filler pic x(5).
  88 Zip-plus-4-valid value '-0000' thru '-9999'.

并测试:

If Zip-Valid and Zip-plus-4-valid...
于 2013-06-05T20:14:38.057 回答
0

您可以使用 MOVE CORR

 01 TX-ZIPCODE          PIC X(08) VALUE '    -   '.
 01 TX-ZIPCODE-R REDEFINES TX-ZIPCODE.
    03 ZIPCODE-P1       PIC 9(04).
    03 FILLER           PIC X(01).
    03 ZIPCODE-P2       PIC 9(03).
 01 NUM-ZIPCODE         PIC X(07).
 01 NUM-ZIPCODE-R REDEFINES NUM-ZIPCODE.
    03 ZIPCODE-P1       PIC 9(04).
    03 ZIPCODE-P2       PIC 9(03).




 MOVE CORR TX-ZIPCODE-R TO NUM-ZIPCODE-R.

 IF NUM-ZIPCODE IS NOT NUMERIC
*     ERRO
 END-IF.

希望我对你有帮助!:)

于 2014-10-16T02:48:10.997 回答
0

一种不同的方法可能是让 CICS BMS 支持为您完成大部分验证和编辑。这假设您正在使用带有 CICS 的 3270 型终端(可能是这种情况)

尝试将邮政编码设置为 BMS 地图上的组字段。这具有创建具有多个部分的单个输入字段的效果。

您的 BMS 地图定义如下所示:

 ZIP1     DFHMDF POS=(2,1),LENGTH=5,GRPNAME=ZIP,ATTRB=(UNPROT,NUM)
 SEP      DFHMDF POS=(2,6),LENGTH=1,GRPNAME=ZIP,ATTRB=(ASKIP,NORM),INITIAL='-'
 ZIP2     DFHMDF POS=(2,7),LENGTH=5,GRPNAME=ZIP,ATTRB=(UNPROT,NUM),JUSTIFY=(LEFT,BLANK)

邮政编码将出现在第 2 行的开头 (POS=(2..))。它将有一个 5 位输入字段 (ZIP1) 用于邮政编码的第一部分,然后是一个硬编码输入保护破折号 (SEP) 和另一个左对齐的 5 位空白填充输入字段 (ZIP2) 用于邮政编码的最后一部分邮政编码。

从此时起,BMS 将强制用户在邮政编码的第一部分输入 5 位数字,不能触摸破折号,并可选择在输入字段的第二部分输入 0 到 5 位数字。这些字段都不接受非数字数据(受输入保护的 SEP 除外)

当您从屏幕检索数据时,您需要做的就是检查 ZIP2 是否为数字,以确定输入的是长邮编还是短邮编。如果 Zip 长,则存储整个内容,如果短,则仅存储 ZIP1。

于 2013-03-26T16:47:46.767 回答