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

时间:2013-11-17 15:39:56

标签: 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.

错误:

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

编译失败的原因是什么?

2 个答案:

答案 0 :(得分:5)

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

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

88级,条件名称,不能发生,但如果定义的字段是OCCURS的一部分或从属于OCCURS,则88将需要下标,如任何02-49级别它也是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工作,不仅仅是定义,还有使用,下标的字段,下标的索引和下标的文字。

然后变得更复杂。

答案 1 :(得分:3)

COBOL有几个“神奇”级别的数字......

  • 66级项目表示预期RENAMES条款
  • Level-77项目是原子的,不能细分,不能有OCCURS条款。
  • Level-88表示条件名称条目

请参阅programmer's guide的第5-4和5-5页。