0

我是 COBOL(和 OpenCOBOL)的新手,我的问题是关于 OpenCOBOL 中的“复杂 odo”(发生...取决于)。

我在以下代码中使用了 1.0

……

01  W-PTDO-PROC-TBL.
       05  W-PTDO-PROC-ENTRY OCCURS 0 TO 450 TIMES
             DEPENDING ON W-PTDO-PROC-MAX
             INDEXED BY W-PTDO-PROC-INDX.
           10 W-PTDO-PROC-APC        PIC X(05).
           10 W-PTDO-PROC-LNSUB      PIC S9(07)   COMP-3.
           10 W-PTDO-PROC-KEY.
               15 W-PTDO-PROC-WA-OFFSET  PIC 9(08)V99.
               15 W-PTDO-PROC-UNITS      PIC 9(09).
           10 W-PTDO-PROC-DEVICE-CNT PIC 9(03).
           10 W-PTDO-PROC-DARRAY OCCURS 0 TO 450 TIMES
                DEPENDING ON W-PTDO-DARRAY-MAX
                INDEXED BY W-PTDO-DARRAY-INDX.
               15  W-PTDO-PROC-DHCPCS PIC X(05).
           10 W-PTDO-DARRAY-SIZE     PIC 9(03).
           10 W-PTDO-PROC-TOT-DCHRGS PIC 9(10)V99.
           10 W-PTDO-PROC-TOT-DUNITS PIC 9(05).
           10 W-PTDO-PROC-USED       PIC X(01).

……

cobc 返回此错误消息:

错误:由于“W-PTDO-PROC-DARRAY”,“W-PTDO-PROC-ENTRY”不能有 OCCURS 子句

上面的错误消息是从我发现此注释的 field.c 发出的 /* 包含 OCCURS DEPENDING 子句的数据项不应从属于具有 OCCURS 子句的数据项 */

有没有办法让 OpenCOBOL 支持这种“复杂的 odo”?

根据 IBM 的 COBOL 编程指南的附录,我上面的代码片段,“OCCURS DEPENDING”嵌套在更高级别的“OCCURS”子句下,似乎是一个定义明确的“complex-odo”。

谢谢,

比利·荣

4

1 回答 1

2

您不能在另一个数组中包含可变长度数组(OCCURS DEPENDING ON)!

所需的处理太复杂了。如果允许内部数组项的长度变化,则计算外部数组第 N 个条目的开始的唯一可能方法是从 1 到 N 顺序访问每个内部成员,并使用 DEPENDING ON 计数来计算其长度,因此是下一个数组条目的开始。

于 2011-03-14T06:12:58.523 回答