嘿大家。我在尝试使用 COBOL 在 zOS 环境中解决的编码项目中遇到了一些麻烦。我需要读入一个文件并将它们放入一个索引表中(我知道会有少于 90 条记录)。
让我感到震惊的是,我们受项目参数的约束以使用名为“Table-Size”的变量(在声明时设置为零)。
鉴于这一切,我需要做一些类似“根据表大小发生 1 到 90 次”的事情,但我不明白如果表大小必须(据我所知)这将如何工作,因为表 -大小随着添加到表中的每个条目而增加。谁能帮我解决这个问题?
谢谢!
嘿大家。我在尝试使用 COBOL 在 zOS 环境中解决的编码项目中遇到了一些麻烦。我需要读入一个文件并将它们放入一个索引表中(我知道会有少于 90 条记录)。
让我感到震惊的是,我们受项目参数的约束以使用名为“Table-Size”的变量(在声明时设置为零)。
鉴于这一切,我需要做一些类似“根据表大小发生 1 到 90 次”的事情,但我不明白如果表大小必须(据我所知)这将如何工作,因为表 -大小随着添加到表中的每个条目而增加。谁能帮我解决这个问题?
谢谢!
听起来您主要关心的是:如果大小在运行时发生变化,编译器如何知道在数组中分配多少?
答案是它分配了最大的空间量(足够 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
)。
因此,例如,如果被 占用的内存TABLE
,AaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii
则写入文件的日期可能会缩短(包括大小):2AaaaBbbb
。
同样,当重新读入记录时,将从文件中填充两者TABLE-SIZE
和相关位(仅设置大小和前两个元素)。TABLE
我不相信发生这种情况时未使用的TABLE
条目会被初始化为任何东西。如果您需要向表中添加另一个项目,最好不要假设,并明确填充它们。
为了提高效率,您可能需要考虑将 设置TABLE-SIZE
为USAGE IS COMP
。