Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/python-2.7/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
COBOL可变表大小_Cobol - Fatal编程技术网

COBOL可变表大小

COBOL可变表大小,cobol,Cobol,当我需要将数量可变的记录加载到表中时,我通常使用以下三种方法之一: 猜测表的最大大小(“MAX-table-size”)。根据INPUT-FILE-RECORD-COUNT,使表格出现1到最大表格大小的时间。在将输入记录加载到表中时统计输入记录的数量。如果输入文件中的记录数大于MAX-TABLE-SIZE,则显示所需的表格大小并停止运行。然后手动使用更高的MAX-TABLE-SIZE值重新编译程序,然后重新运行该程序 使用两个程序。第一个程序统计输入文件中的记录数,编写第二个源代码文件(具有必要

当我需要将数量可变的记录加载到表中时,我通常使用以下三种方法之一:

  • 猜测表的最大大小(“MAX-table-size”)。根据INPUT-FILE-RECORD-COUNT,使表格出现1到最大表格大小的时间。在将输入记录加载到表中时统计输入记录的数量。如果输入文件中的记录数大于MAX-TABLE-SIZE,则显示所需的表格大小并停止运行。然后手动使用更高的MAX-TABLE-SIZE值重新编译程序,然后重新运行该程序

  • 使用两个程序。第一个程序统计输入文件中的记录数,编写第二个源代码文件(具有必要的最大表大小),编译第二个程序,并执行第二个程序。这种方法避免了手动重新运行程序,但需要更长的时间,因为总是需要编译

  • 将数据写入文件,而不是表。然后,数据可以有可用磁盘空间允许的任意多的记录。如果不再需要,请删除程序末尾的文件。这种方法避免了为较大的数据重新编译程序,但从磁盘读取和写入数据要比使用内存表慢


  • COBOL中是否有其他技术用于处理可变数量的记录?它们的优点/缺点是什么?

    除非已知性能是一个问题,否则您无法改进(3)。前两种方法在生产软件中使用的开销太大&手动处理。今天的硬盘在缓存数据方面做得很好,在大多数情况下,性能应该不是问题

    如果您必须将记录读入内存,那么您最好的办法(过去通常是这样做的)是估计您需要的记录数量,并将其大量增加,以便在大多数情况下只需运行一次,而无需重新编译。如果出错,则必须增加表分配。仅仅基于糟糕的编程/设计技术,使这种方法优于(3)需要大量的性能考虑


    这些基本上是你的选择。如果你想提供更多关于你正在努力完成的事情的信息,可能会有进一步的建议。。。GLTY.

    正如@RegularExpression所说,如果可能的话,应该避免选择1和2。 除了3之外,我没有通用的解决方案(注意:除了索引文件,还可以使用临时(本地???)DB表)。 在大多数情况下,此选项将足够快

    有几种解决方案在特定情况下有效

  • 一个或多个排序合并(即对公共键上的输入文件进行排序并合并文件) 通常是最有效的,可用于大多数批处理程序。它将涉及重写现有的 代码,有一系列的小程序,并使用更多的磁盘空间。如果需要,可以卸载数据库(或者对于SQL数据库,可以使用order by)

  • 使用选项3,但内存中有一个小表。内存表的设计是针对具体情况的

    • 我曾经在一个人事系统上工作过,这个系统有数千份名册,公司99%的员工每周工作40小时。在这种情况下,最后使用的2元素表产生了奇迹

  • 为什么需要将一个大文件加载到内存中???Valdis,很抱歉,虽然很有趣,但这与堆栈溢出无关。你自己已经想出了三个答案,在这两个答案中确实还有几个,我对现有的答案有些同意,有些不同意。试着找到适合你的特定COBOL的地方,并在那里提问。正如@BruceMartin在对他的回答的评论中指出的,如果你有一个特定的情况,你应该能够在这个基础上制定一个主题问题。如果这只是一个一般性的问题,那就不适用于这里。这是一个一般性的问题。虽然StackOverflow的主题“离题”,但答案很有启发性。谢谢。嗯,我不同意你接受的答案,还有很多其他的事情。我希望你会说GNUCobol,因为他们有一个讨论区。你使用什么COBOL/OS?为什么第一个是开销,你觉得它包括什么?完全取决于数据,但3)的大多数用法都可以轻而易举地完成。我在64位DebianLinux上使用GNUCobol。然而,与其在那个操作系统上为Cobol寻找解决方案,我宁愿有几个通用选项。然后,我可以在我使用的任何平台上尝试每一个,并找到哪一个是最有效的、可维护的,等等。两个文件匹配。另外,根据数据的不同,内存解决方案是无问题的。Enterprise COBOL V4有128MB的工作存储空间。V5具有2GB的工作存储空间。如果使用内存效率不高,这些内存就不会太大。数据的正确方法。正如您的项目符号所示,了解您的数据。这个问题绝对没有明确的答案。@BillWoodger我已经有一段时间没有在大型机上工作了,同时运行大量内存不足的程序会有什么影响???这要看情况而定。如果程序正在做一些愚蠢的事情,你可以杀死机器(这一定是很多程序现在非常愚蠢)。如果选择的解决方案适合这个问题,你不会注意到。和过去一样,只是比例不同。因为最好的方法取决于数据,所以OPs在这里是一个不可能回答的问题。我同意不可能回答位,给出具体细节的问题会更好