Mainframe Path Start learning free
BeginnerCobol

Read a file and produce totals

The shape of most batch COBOL: open, loop, accumulate, close, report.

PAYSUM
       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.

Ask a question