我是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.
答案 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之前,在程序结束之前)。