I want to compare two sorted input files on the basis of key and need all matched and unmatched values in single output file. I have already written the code but my code is not giving expected results if number of records in input file are not same (record count may differ in any of the input file or it could be same also). I searched the forum before posting this query but didnt find any solution. Looking forward to your suggestions/input. Thanks!
Eg:
Input Files (Number of records are not same):
File1
1
2
3
5
7
8
File2
1
2
4
5
6
Expected Output File:
1
2
3
4
5
6
7
8
Code:
FILE SECTION.
FD IN-FILE1.
01 IN-FILE1-REC.
10 KEY-FILE1 PIC 9(1).
FD IN-FILE2.
01 IN-FILE2-REC.
10 KEY-FILE2 PIC 9(1).
FD OUT-FILE3.
01 OUT-FILE3-REC.
10 KEY-FILE3 PIC 9(1).
WORKING-STORAGE SECTION.
01 WS-TEMP-VAR.
05 WS-FILE1-EOF-FLG PIC X(1) VALUE SPACE.
88 WS-FILE1-SOF VALUE 'N'.
88 WS-FILE1-EOF VALUE 'Y'.
05 WS-FILE2-EOF-FLG PIC X(1) VALUE SPACE.
88 WS-FILE2-SOF VALUE 'N'.
88 WS-FILE2-EOF VALUE 'Y'.
PROCEDURE DIVISION.
0000-BEGIN.
PERFORM 1000-INIT
PERFORM 2000-PROCESS THRU 2000-EXIT
UNTIL WS-FILE1-EOF OR WS-FILE2-EOF
PERFORM 3000-TERMINATE THRU 3000-EXIT
GOBACK.
1000-INIT.
OPEN INPUT IN-FILE1
IN-FILE2
OPEN OUTPUT OUT-FILE3
PERFORM READ-FILE1
PERFORM READ-FILE2.
****************************************************
2000-PROCESS.
IF KEY-FILE1 = KEY-FILE2
MOVE IN-FILE1-REC TO OUT-FILE3-REC
WRITE OUT-FILE3-REC
PERFORM READ-FILE1
PERFORM READ-FILE2
ELSE
IF KEY-FILE1 < KEY-FILE2
MOVE IN-FILE1-REC TO OUT-FILE3-REC
WRITE OUT-FILE3-REC
PERFORM READ-FILE1
PERFORM WRITE-FILE2
ELSE
MOVE IN-FILE2-REC TO OUT-FILE3-REC
WRITE OUT-FILE3-REC
PERFORM READ-FILE2
PERFORM WRITE-FILE1
END-IF
END-IF.
****************************************************
2000-EXIT.
EXIT.
****************************************************
READ-FILE1.
READ IN-FILE1
AT END
DISPLAY 'FILE1 FILE IS EMPTY'
SET WS-FILE1-EOF TO TRUE
END-READ.
****************************************************
READ-FILE2.
READ IN-FILE2
AT END
DISPLAY 'FILE2 FILE IS EMPTY'
SET WS-FILE2-EOF TO TRUE
END-READ.
****************************************************
WRITE-FILE1.
IF WS-FILE2-EOF
MOVE IN-FILE1-REC TO OUT-FILE3-REC
WRITE OUT-FILE3-REC
END-IF.
****************************************************
WRITE-FILE2.
IF WS-FILE1-EOF
MOVE IN-FILE2-REC TO OUT-FILE3-REC
WRITE OUT-FILE3-REC
END-IF.
*****************************************************
3000-TERMINATE.
CLOSE IN-FILE2
IN-FILE1
OUT-FILE3
3000-EXIT.
EXIT.