COBOL混淆

时间:2009-03-28 01:55:01

标签: cobol

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

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

考虑到所有这些,我需要做一些类似“根据表大小发生1到90次”的事情,但我不明白如果表大小必须如何(据我所知)因为table-size随着添加到表中的每个条目一起递增。有人可以帮我解决这个问题吗?

谢谢!

2 个答案:

答案 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

同样,当回读记录时,2AaaaBbbbTABLE-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 articlethis article