Merge Two Sorted Files
Problem Description
Read two sorted files and merge them into one sorted output file.
Expected Output
Single sorted output file from two inputs
Hints
Use two file pointers, compare current records, write smaller one.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. MERGEFILES.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE1 ASSIGN TO "FILE1.DAT".
SELECT FILE2 ASSIGN TO "FILE2.DAT".
SELECT OUTFILE ASSIGN TO "MERGED.DAT".
DATA DIVISION.
FILE SECTION.
FD FILE1.
01 REC1.
05 KEY1 PIC 9(5).
05 DATA1 PIC X(25).
FD FILE2.
01 REC2.
05 KEY2 PIC 9(5).
05 DATA2 PIC X(25).
FD OUTFILE.
01 OUT-REC PIC X(30).
WORKING-STORAGE SECTION.
01 WS-EOF1 PIC 9 VALUE 0.
01 WS-EOF2 PIC 9 VALUE 0.
PROCEDURE DIVISION.
OPEN INPUT FILE1 FILE2 OUTPUT OUTFILE.
READ FILE1 AT END MOVE 1 TO WS-EOF1 END-READ.
READ FILE2 AT END MOVE 1 TO WS-EOF2 END-READ.
PERFORM UNTIL WS-EOF1 = 1 AND WS-EOF2 = 1
EVALUATE TRUE
WHEN WS-EOF1 = 1
WRITE OUT-REC FROM REC2
READ FILE2 AT END MOVE 1 TO WS-EOF2 END-READ
WHEN WS-EOF2 = 1
WRITE OUT-REC FROM REC1
READ FILE1 AT END MOVE 1 TO WS-EOF1 END-READ
WHEN KEY1 <= KEY2
WRITE OUT-REC FROM REC1
READ FILE1 AT END MOVE 1 TO WS-EOF1 END-READ
WHEN OTHER
WRITE OUT-REC FROM REC2
READ FILE2 AT END MOVE 1 TO WS-EOF2 END-READ
END-EVALUATE
END-PERFORM.
CLOSE FILE1 FILE2 OUTFILE.
DISPLAY "FILES MERGED SUCCESSFULLY!".
STOP RUN.
Explanation:
Classic merge algorithm with two input files, comparing keys.