2011-12-05 251 views

回答

2

关闭文件,重新打开并重新阅读。

我很想知道为什么要这样做?

+0

Hi TrueDub,我正在搜索文件2中文件1中字符串的出现,但没有键。尽管如此,谢谢你的出色答复。 – Grekoz

+0

将文件读入数组并轻松搜索每个文件会更容易吗?它肯定会更快,但如果它是一个巨大的文件,您可能会遇到内存问题。 – TrueDub

+0

在这种情况下,'DFSORT'的'JOINKEYS'帮助很多。我强烈建议你的方法,如果你的要求是只搜索字符串从file1与字符串在file2中的列表... –

2

您也可以读取循环内的文件或执行变化。与其他答案一样,确保每次到达结尾时都关闭文件并重新打开文件。

+0

嗨比尔,重新打开文件可以达到一千重新开放,我认为这将是太昂贵效率低下。 – Grekoz

0

在这种情况下,JOINKEYSDFSORT帮助很多。如果您的要求只是从file1中搜索字符串file2中的字符串,我强烈建议您不要使用这种方法。

+0

嗨拉贾,Joinkeys或dfsort不会帮助,因为没有钥匙,也没有什么可以排序。文件1是垃圾,文件2每行只有一个字符串。目标是从文件2的每行中找到文件1中的单个字符串。如果在文件1中找到了某个字符串,请在文件2中将该标记放在该字符串中,然后在下一行中获取下一个项目,然后查找从顶部发生文件1中的字符串。 – Grekoz

+0

我明白了......但如果你觉得你可以使用它们,仍然会尝试合并......我觉得你曾经想过......只用你的cobol程序逻辑...如果你仍然需要一些建议,把一个简要的文件布局和lrecls的要求可能会尝试解决... –

0

替代方法:使用实用程序(或其他COBOL程序)复制文件1。副本文件1a具有ORGANIZATION RELATIVE(可能是VSAM RRDS)。在您的扫描/匹配程序中,您可以使用START语句重新定位到文件1a的第一条记录。

等价地,你可以创建一个索引顺序文件1a,其中键只是一个随机的升序数,恰好与记录号相同。

0

任何时候打开,处理,关闭,重新打开,重新处理,重新关闭都是简单的愚蠢,更不用说高达1,000。这是非常非常耗时的。

使用Cobol程序,您可以将较小的文件存储在一个表中,并按照建议对较大文件处理表。

但是,您不需要程序。 JOINKEYS 给你解决方案。

你没有钥匙?哦,亲爱的,亲爱的。你做一个。对于两个文件上的每条记录,您都使用相同的单字节密钥,并且具有相同的值。在该键上执行JOINKEYS。在JOINKEYS上指定SORTED(如果您有DFSORT,则指定NOSEQCK)您有“笛卡尔”联接。使用SS(一个子字符串匹配)可以用于整个记录或记录的一部分。你的实际要求的输出是不清楚的,我不认为你现在会想出来。

使用DFSORT,您可以一步完成。使用SyncSort,如果您的版本支持JNFnCMTL文件,则可以一步完成。

相关问题