在非常简单的COBOL程序中使用OCCURS时出错

cho*_*603 1 cobol gnucobol

这是我的代码,其中iIam使用OCCURS声明变量.

   IDENTIFICATION DIVISION.
   PROGRAM-ID. ARRAYEX.

   ENVIRONMENT DIVISION.
   INPUT-OUTPUT SECTION.
   FILE-CONTROL.
        SELECT StudentFile ASSIGN TO "STUDENTS.DAT"
            ORGANIZATION IS LINE SEQUENTIAL.

   DATA DIVISION.
   WORKING-STORAGE SECTION.
   77 WS-FIRSTARR OCCURS 10 TIMES PIC 9(5).

   PROCEDURE DIVISION.

   DISPLAY "HELLO WORLD".
   STOP RUN.
Run Code Online (Sandbox Code Playgroud)

错误:

arrayex.cbl:12:错误:级别77项"WS-FIRSTARR"不能有OCCURS子句

编译失败的原因是什么?

Bil*_*ger 5

A 77不能有OCCURS.01不能有OCCURS.级别02-49可以有OCCURS.

忘记等级66(用于RENAMES子句),因为你不应该使用它,也不太可能看到它.

一个88级,一个条件名称,不能发生,但如果它所定义的字段是OCCURS的一部分或从属于OCCURS,那么88将需要下标,如同任何02-49级,也是OCCURS的一部分或从属于OCCURS.

01  a-simple-array-structure.
    05  the-data occurs 5 times           pic 9(5).
Run Code Online (Sandbox Code Playgroud)

或者你可以变得更复杂.

01  b-structure.
    95  the-key                           pic x(8).
    05  some-data                         pic x(10).
    05  some-more-data                    pic 9(7).
    05  a-simple-array.
        10  a-simple-array-item occurs 5 times       
                                          pic 9(5).
    05  a-more-complex-array.
        10  complex-entry occurs 10 times.
            15  some-complex-data         pic xx.
            15  another-bit-of-complex-data
                                          pic 9(5).
Run Code Online (Sandbox Code Playgroud)

OCCURS也可用于定义多维表.

    05  first-occurs occurs 5 times.
        10  second-occurs occurs 5 times.
            15  an-item                   pic xx.
Run Code Online (Sandbox Code Playgroud)

这还远远不是OCCURS的全部范围,所以开始简单,练习,让它工作,变得更复杂.

还有OCCURS DEPENDING ON,一个可变长度的表.一心一意.得到一个简单的OCCURS工作,不仅仅是定义,还有使用,下标的字段,下标的索引和下标的文字.

然后变得更复杂.