1

这是我使用 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.

错误:

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

编译失败的任何原因?

4

2 回答 2

5

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).

或者你可以变得更复杂。

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).

OCCURS 也可用于定义多维表。

    05  first-occurs occurs 5 times.
        10  second-occurs occurs 5 times.
            15  an-item                   pic xx.

这距离 OCCURS 的全部范围还很远,所以从简单开始,练习,让它工作,变得更复杂。

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

然后变得更复杂。

于 2013-11-17T22:02:49.380 回答
3

COBOL 有几个“魔术”级别的数字......

  • 第 66 级项目表示需要一个 RENAMES 子句
  • 77 级项目是原子的,不能细分,不能有 OCCURS 子句。
  • Level-88 表示条件名称条目

请参阅程序员指南的第 5-4 页和第 5-5 页。

于 2013-11-17T18:34:19.313 回答