3

嘿大家。我在尝试使用 COBOL 在 zOS 环境中解决的编码项目中遇到了一些麻烦。我需要读入一个文件并将它们放入一个索引表中(我知道会有少于 90 条记录)。

让我感到震惊的是,我们受项目参数的约束以使用名为“Table-Size”的变量(在声明时设置为零)。

鉴于这一切,我需要做一些类似“根据表大小发生 1 到 90 次”的事情,但我不明白如果表大小必须(据我所知)这将如何工作,因为表 -大小随着添加到表中的每个条目而增加。谁能帮我解决这个问题?

谢谢!

4

2 回答 2

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,则只会写入 8 个字符TABLE(当然,超出为 写入的字符TABLE-SIZE)。

因此,例如,如果被 占用的内存TABLEAaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii则写入文件的日期可能会缩短(包括大小):2AaaaBbbb

同样,当重新读入记录时,将从文件中填充两者TABLE-SIZE和相关位(仅设置大小和前两个元素)。TABLE

我不相信发生这种情况时未使用的TABLE条目会被初始化为任何东西。如果您需要向表中添加另一个项目,最好不要假设,并明确填充它们。

为了提高效率,您可能需要考虑将 设置TABLE-SIZEUSAGE IS COMP

于 2009-03-28T04:34:37.460 回答
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 上的本文。

于 2009-03-28T04:16:14.477 回答