当我需要将可变数量的记录加载到表中时,我通常使用以下三种方法之一:
猜猜表的最大大小(" MAX-TABLE-SIZE")。使表OCCUR 1至MAX-TABLE-SIZE TIMES依赖于INPUT-FILE-RECORD-COUNT。计算输入记录的数量,同时将它们加载到表中。如果输入文件中的记录数大于MAX-TABLE-SIZE,则显示所需的表大小并停止RUN。然后手动重新编译具有更高MAX-TABLE-SIZE值的程序并重新运行程序。
使用两个程序。第一个计算输入文件中的记录数,使用必要的MAX-TABLE-SIZE写入第二个源代码文件,编译第二个程序,然后执行第二个程序。这种方法避免了手动重新运行程序,但需要更长时间,因为总是需要编译。
将数据写入文件而不是表格。然后,数据可以包含可用磁盘空间允许的记录数。如果不再需要,请删除程序末尾的文件。这种方法避免了需要为更大的数据重新编译程序,但是读取和写入磁盘比使用内存表更慢。
COBOL中是否还有其他技术可用于处理可变数量的记录?它们的优点/缺点是什么?
答案 0 :(得分:1)
除非知道性能是一个问题,否则你无法改进(3)。前两个有太多的开销和用于生产软件的手动处理。今天的硬盘驱动器在缓存数据方面做得非常出色,在大多数情况下性能应该不是问题。
如果您绝对必须将记录读入内存,那么您最好的拍摄(以及以前常规做的事情)就是估计您需要的记录数量并大量增加,以便大部分时间需要只有一次运行,没有重新编译。如果您输入错误,那么您将不得不增加表分配。要使这种方法优于(3)仅仅基于糟糕的编程/设计技术,需要很多性能考虑。
这些基本上是您的选择。如果您想提供有关您要完成的内容的更多信息,可以提供进一步的建议...... GLTY。
答案 1 :(得分:1)
正如@RegularExpression所说,如果可能的话,应该避免选项1和2。 除了3之外我没有一般解决方案(注意:以及索引文件可以使用临时(本地??)DB表)。 在大多数情况下,这个选项足够快。
有几种解决方案适用于特定情况
一个或多个排序合并(即在公共密钥上排序输入文件并合并文件) 通常效率最高,可以在大多数批处理程序中使用。它将涉及重写现有的 代码,具有一系列小程序并使用更多磁盘空间。如果需要,可以卸载DB(或者对于可以使用该命令的SQL DB)。
使用选项3但内存中有一个小表。内存表的设计是特定于案例的。