Master-Transaction Update
Problem Description
Update master file with transactions: A=Add, U=Update, D=Delete. Both files sorted by key.
Expected Output
Updated master file
Hints
Match keys between files, handle each transaction type.
Solution
IDENTIFICATION DIVISION.
PROGRAM-ID. MASTERUPD.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT MASTER-IN ASSIGN TO "MASTER.DAT".
SELECT TRANS-FILE ASSIGN TO "TRANS.DAT".
SELECT MASTER-OUT ASSIGN TO "NEWMAST.DAT".
DATA DIVISION.
FILE SECTION.
FD MASTER-IN.
01 MASTER-REC.
05 M-KEY PIC 9(5).
05 M-NAME PIC X(20).
05 M-BALANCE PIC S9(7)V99.
FD TRANS-FILE.
01 TRANS-REC.
05 T-CODE PIC X(1).
05 T-KEY PIC 9(5).
05 T-NAME PIC X(20).
05 T-AMOUNT PIC S9(7)V99.
FD MASTER-OUT.
01 NEW-MASTER PIC X(32).
WORKING-STORAGE SECTION.
01 WS-EOF-M PIC 9 VALUE 0.
01 WS-EOF-T PIC 9 VALUE 0.
01 WS-ADDED PIC 9(4) VALUE 0.
01 WS-UPDATED PIC 9(4) VALUE 0.
01 WS-DELETED PIC 9(4) VALUE 0.
PROCEDURE DIVISION.
OPEN INPUT MASTER-IN TRANS-FILE OUTPUT MASTER-OUT.
READ MASTER-IN AT END MOVE 1 TO WS-EOF-M END-READ.
READ TRANS-FILE AT END MOVE 1 TO WS-EOF-T END-READ.
PERFORM UNTIL WS-EOF-M = 1 AND WS-EOF-T = 1
EVALUATE TRUE
WHEN WS-EOF-T = 1
WRITE NEW-MASTER FROM MASTER-REC
READ MASTER-IN AT END MOVE 1 TO WS-EOF-M END-READ
WHEN WS-EOF-M = 1
IF T-CODE = "A"
MOVE T-KEY TO M-KEY
MOVE T-NAME TO M-NAME
MOVE T-AMOUNT TO M-BALANCE
WRITE NEW-MASTER FROM MASTER-REC
ADD 1 TO WS-ADDED
END-IF
READ TRANS-FILE AT END MOVE 1 TO WS-EOF-T END-READ
WHEN T-KEY = M-KEY
EVALUATE T-CODE
WHEN "U" ADD T-AMOUNT TO M-BALANCE ADD 1 TO WS-UPDATED
WHEN "D" ADD 1 TO WS-DELETED
END-EVALUATE
READ TRANS-FILE AT END MOVE 1 TO WS-EOF-T END-READ
WHEN T-KEY > M-KEY
WRITE NEW-MASTER FROM MASTER-REC
READ MASTER-IN AT END MOVE 1 TO WS-EOF-M END-READ
END-EVALUATE
END-PERFORM.
CLOSE MASTER-IN TRANS-FILE MASTER-OUT.
DISPLAY "ADDED: " WS-ADDED " UPDATED: " WS-UPDATED " DELETED: " WS-DELETED.
STOP RUN.
Explanation:
Classic sequential file update pattern used in batch processing.