我是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答案 0 :(得分:2)
你不能在另一个数组中有一个可变长度数组(OCCURS DEPENDING ON)!
所需的处理过于复杂。如果允许内部数组项的长度变化,则计算外部数组的第N个条目的开始的唯一可能方式是顺序访问从1到N的每个内部成员并使用DEPENDING ON计数来计算其长度,因此下一个数组条目的开始。