OpenCOBOL复杂ODO(依据OCCURS)

时间:2011-02-24 07:00:43

标签: gnucobol

我是COBOL(和OpenCOBOL)的新手,我的问题是关于OpenCOBOL中的“复杂odo”(OCCURS ...依赖)。

我在下面的代码

上使用了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-ENTRY'由于'W-PTDO-PROC-DARRAY'而不能拥有OCCURS条款

以上错误msg是从field.c发出的,我发现了这条评论 / *包含OCCURS DEPENDING子句的数据项不应从属于具有OCCURS子句的数据项* /

有没有让OpenCOBOL支持这个“复杂的odo”?

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

谢谢,

Billy Rong

1 个答案:

答案 0 :(得分:2)

你不能在另一个数组中有一个可变长度数组(OCCURS DEPENDING ON)!

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