如何在COBOL中的嵌套记录中分配字段

时间:2014-10-14 13:15:22

标签: cobol

我是COBOL上的小伙子,我给自己买了一本“傻瓜”类书,但它缺乏深度。

我正在尝试从嵌套记录中分配和检索字段的值。我正按照我的书建议,这个:

 WRITE REPORT-LINE FROM DATE OF HEADER
    AFTER ADVANCING PAGE.
 WRITE REPORT-LINE FROM INSTITUTION OF HEADER
    AFTER 1.
 WRITE REPORT-LINE FROM BRANCH OF HEADER
    AFTER 1.
 WRITE REPORT-LINE FROM DIVISION OF HEADER
    AFTER 1.
 WRITE REPORT-LINE FROM FILLER-LINE

我的标题的布局就是这个:

01  HEADER.
    02  DATE.
        03  O-MONTH                   PIC ZZ.
        03  FILLER                    PIC X(01) VALUE '/'.
        03  O-DAY                     PIC 99.
        03  FILLER                    PIC X(01) VALUE '/'.
        03  O-YEAR                    PIC 99.
        03  FILLER                    PIC X(116) VALUE SPACES.
        03  PAGE                      PIC A(4) VALUE 'PAGE'.
        03  FILLER                    PIC X(1) VALUE SPACE.

基本上我的问题是,例如我如何从HEADER访问记录DATE的0-DAY字段?

分配和检索。它会是这样的:

MOVE 21 TO 0-DAY OF DATE OF HEADER.

1 个答案:

答案 0 :(得分:3)

首先避免使用"单词"的数据名称。 DATE例如是一个单词,SOMETHNG-DATE或DATE-SOMETHING不是。

DATE本身在COBOL中是Reserved Word,所以我认为你的例子不太可能编译。像HEADER这样的词在未来很容易被保留(虽然这些天标准委员会试图避免这样做。)

HEADER是一个小组项目。 DATE是一个组项。其他领域是基本项目。我们不会将此类结构视为"嵌套",就像必须包含至少一个基本项目的组项一样。

您需要使用OF / IN的唯一时间是有非唯一名称(您应该避免使用)。

所以:

MOVE 21 TO 0-DAY

只要0-DAY不是重复名称,就可以工作。你展示的语法也会起作用,但为什么要添加所有额外的东西,这只会增加拼写错误的可能性,并让下一位读者认为你的程序有非唯一的名称。

尽量避免PROCEDURE DIVISION中的完全停止/句号,除非是必要的(在PROCEDURE DIVISION标题之后,在段落/ SECTION标签之后的段落/ SECTION之前,在程序结束之前)。