BeginnerCobol
Read a file and produce totals
The shape of most batch COBOL: open, loop, accumulate, close, report.
IDENTIFICATION DIVISION.
PROGRAM-ID. PAYSUM.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT PAY-FILE ASSIGN TO INFILE
ORGANIZATION IS SEQUENTIAL
FILE STATUS IS WS-STATUS.
DATA DIVISION.
FILE SECTION.
FD PAY-FILE.
01 PAY-RECORD.
05 PAY-DEPT PIC X(04).
05 PAY-EMP-ID PIC X(08).
05 PAY-AMOUNT PIC S9(7)V99 COMP-3.
05 FILLER PIC X(20).
WORKING-STORAGE SECTION.
01 WS-STATUS PIC XX VALUE SPACES.
88 WS-OK VALUE '00'.
88 WS-EOF VALUE '10'.
01 WS-COUNT PIC 9(07) VALUE ZERO.
01 WS-REJECTS PIC 9(07) VALUE ZERO.
01 WS-TOTAL PIC S9(11)V99 COMP-3 VALUE ZERO.
01 WS-TOTAL-ED PIC ZZZ,ZZZ,ZZ9.99-.
PROCEDURE DIVISION.
0000-MAIN.
PERFORM 1000-INIT
PERFORM 2000-PROCESS UNTIL WS-EOF
PERFORM 3000-WRAPUP
GOBACK.
1000-INIT.
OPEN INPUT PAY-FILE
IF NOT WS-OK
DISPLAY 'OPEN FAILED STATUS=' WS-STATUS
MOVE 12 TO RETURN-CODE
GOBACK
END-IF
PERFORM 2900-READ.
2000-PROCESS.
IF PAY-AMOUNT IS NUMERIC
ADD 1 TO WS-COUNT
ADD PAY-AMOUNT TO WS-TOTAL
ELSE
ADD 1 TO WS-REJECTS
DISPLAY 'BAD AMOUNT, EMP=' PAY-EMP-ID
END-IF
PERFORM 2900-READ.
2900-READ.
READ PAY-FILE
AT END CONTINUE
END-READ
IF NOT WS-OK AND NOT WS-EOF
DISPLAY 'READ ERROR STATUS=' WS-STATUS
MOVE 12 TO RETURN-CODE
SET WS-EOF TO TRUE
END-IF.
3000-WRAPUP.
CLOSE PAY-FILE
MOVE WS-TOTAL TO WS-TOTAL-ED
DISPLAY 'RECORDS ACCEPTED : ' WS-COUNT
DISPLAY 'RECORDS REJECTED : ' WS-REJECTS
DISPLAY 'TOTAL AMOUNT : ' WS-TOTAL-ED
IF WS-REJECTS > ZERO
MOVE 4 TO RETURN-CODE
END-IF.Stuck on something else?
Ask the community or search the full course.