【发布时间】:2016-09-16 13:30:57
【问题描述】:
我有一个程序正在读取文件 (FILE1)。对于 FILE1 中的每条记录,它都会获取字段“A”,并在 FILE2 中搜索以查找具有字段“B”匹配值的记录。当 A = B 时,两个文件中的一些字段被读出。该程序目前正在使用如下代码。但是,问题是我在循环中多次打开和关闭 FILE2。我在没有打开循环内的文件的情况下尝试了这个,但是如果我这样做,我会得到重复的记录,因为 FILE2 是从上一次搜索停止的地方读入的。每次从 FILE1 读取新记录时,有什么方法可以指向 File2 的开头?代码如下:
READ FILE(FILE1) INTO (IN_LAYOUT);
DO WHILE (MORE_RECS1);
OPEN FILE(FILE2);
READ FILE(FILE2) INTO (IN_LAYOUT2);
MORE_RECS2 = '1'B;
DO WHILE (MORE_RECS2);
IF (A = B) THEN
DO;
VAL = VAL2;
WRITE FILE (OUFILE) FROM (OUT_LAYOUT);
S_MORE_RECS2 = '0'B;
CLOSE FILE(FILE2);
END; /* ENDIF */
ELSE READ FILE(FILE2) INTO (IN_LAYOUT2);
END; /* INNER DOWHILE */
READ FILE(FILE1) INTO (IN_LAYOUT);
END;
【问题讨论】:
-
你试过在循环外打开文件吗?
-
是的,但是问题是当我在file2中找到我需要的记录并写入记录时,我需要跳出循环以从file1中读取下一条记录。然后,当我再次开始阅读 file2 时,我不是从文件的开头开始。我从上次阅读结束的地方开始。 File2 通常有 40,000 条记录。
-
尽量避免再考虑这个问题。重复打开/关闭的开销是巨大的。请记住,客户为资源付费。如果你只是吸吮他们,他们不会高兴的。 JOINKEYS 是一种可能性,具体取决于程序中的其他内容。或两个文件匹配(排序数据)。或者尝试将一个文件完全存储在程序中。或者尝试通过密钥访问数据。除了多次打开/关闭/读取之外的任何内容。即使您可以避免打开/关闭,您仍然有读取开销。哎哟。
标签: loops logic mainframe pl-i