0

ファイル (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; 
4

2 に答える 2

2

これはマッチマージのように見えます。最初に、一致しているキーでファイルを並べ替えてみてください。

少なくとも一部のメインフレーム ソート ユーティリティには、この match-merge 機能が組み込まれています。たとえば、Syncsort には JOIN 演算子があります。DFSORT にもこの機能があると確信しています。

于 2016-09-16T15:54:18.923 に答える