让我失望的是我们受项目参数的约束,使用名为“Table-Size”的变量(在声明时设置为零)。
考虑到所有这些,我需要做一些类似“根据表大小发生1到90次”的事情,但我不明白如果表大小必须如何(据我所知)因为table-size随着添加到表中的每个条目一起递增。有人可以帮我解决这个问题吗?
谢谢!
答案 0 :(得分:9)
听起来你的主要关注点是:如果大小在运行时发生变化,编译器如何知道在数组中分配多少?
答案是它分配最大空间量(足够90个条目)。请注意,这是用于工作存储中的空间。当记录写入文件时,只写入相关部分。
一个例子:
01 TABLE-SIZE PIC 9
01 TABLE OCCURS 1 TO 9 TIMES DEPENDING ON TABLE-SIZE
03 FLD1 PIC X(4)
这将为工作存储中的TABLE
分配36个字符(9乘以4)。如果将记录写入文件时将TABLE-SIZE
设置为2,则将仅写入TABLE
的8个字符(超出为{{1}写入的字符当然)。
因此,例如,如果TABLE-SIZE
占用的内存为TABLE
,则写入文件的日期可能会缩短(包括大小):AaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii
。
同样,当回读记录时,2AaaaBbbb
和TABLE-SIZE
的相关位将从文件中填充(仅设置大小和前两个元素)。
我不相信未使用的TABLE
条目会在发生时初始化为任何。不管怎样,最好不要假设,如果你需要在表格中添加另一个项目,请明确填充它们。
为了提高效率,您可以考虑将TABLE
设置为TABLE-SIZE
。
答案 1 :(得分:2)
我们这里没有足够的信息,但基本的是,在DEPENDING ON子句中命名的变量必须具有可变数量的组的计数。所以你需要像
这样的东西01 TABLE-SIZE PIC 99
01 TABLE OCCURS 1 TO 90 TIMES
DEPENDING ON TABLE-SIZE
03 FIELD-1
03 FIELD-2
等等。
在Publib上查看this article或this article。