>>SOURCE FORMAT IS FREE *> python-fixed-width.cob — read a Python-generated *> fixed-width transaction file and print control totals *> Dialect: GnuCOBOL 3.x, free format *> Status : desk-checked against the GnuCOBOL 3.2 Programmer's Guide; *> compiled and run with GnuCOBOL 3.2 on 2026-10-29 *> Inputs : datasets/python-fixed-width-test-data-cobol.dat *> (LINE SEQUENTIAL, LF line endings, 64 bytes per record) *> Outputs: control totals on standard output *> Build : cobc -x -I code code/python-fixed-width.cob *> Run : ./python-fixed-width (from the site folder) IDENTIFICATION DIVISION. PROGRAM-ID. FIXED-WIDTH-READER. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT Txn-File ASSIGN TO "datasets/python-fixed-width-test-data-cobol.dat" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WS-Status. DATA DIVISION. FILE SECTION. FD Txn-File. COPY "python-fixed-width-test-data-cobol.cpy". WORKING-STORAGE SECTION. 01 WS-Status PIC X(2). 01 WS-Eof-Flag PIC X VALUE "N". 88 End-Of-File VALUE "Y". 01 WS-Counters. 05 WS-Read-Count PIC 9(6) VALUE 0. 05 WS-Debit-Count PIC 9(6) VALUE 0. 05 WS-Credit-Count PIC 9(6) VALUE 0. 05 WS-Bad-Count PIC 9(6) VALUE 0. 01 WS-Totals. 05 WS-Debit-Total PIC 9(11)V99 VALUE 0. 05 WS-Credit-Total PIC 9(11)V99 VALUE 0. 05 WS-Net PIC S9(11)V99 VALUE 0. 01 WS-Edited. 05 WS-Count-Out PIC ZZZ,ZZ9. 05 WS-Amount-Out PIC Z,ZZZ,ZZZ,ZZ9.99. 05 WS-Net-Out PIC -,ZZZ,ZZZ,ZZ9.99. PROCEDURE DIVISION. Main-Paragraph. OPEN INPUT Txn-File IF WS-Status NOT = "00" DISPLAY "Cannot open input file, status " WS-Status STOP RUN END-IF PERFORM UNTIL End-Of-File READ Txn-File AT END SET End-Of-File TO TRUE NOT AT END PERFORM Process-Record END-READ END-PERFORM CLOSE Txn-File PERFORM Print-Totals STOP RUN. Process-Record. ADD 1 TO WS-Read-Count IF Txn-Amount IS NOT NUMERIC ADD 1 TO WS-Bad-Count DISPLAY "Bad amount in transaction " Txn-Id ELSE EVALUATE TRUE WHEN Txn-Debit ADD 1 TO WS-Debit-Count ADD Txn-Amount TO WS-Debit-Total WHEN Txn-Credit ADD 1 TO WS-Credit-Count ADD Txn-Amount TO WS-Credit-Total WHEN OTHER ADD 1 TO WS-Bad-Count DISPLAY "Bad type in transaction " Txn-Id END-EVALUATE END-IF. Print-Totals. MOVE WS-Read-Count TO WS-Count-Out DISPLAY "Records read : " WS-Count-Out MOVE WS-Debit-Count TO WS-Count-Out MOVE WS-Debit-Total TO WS-Amount-Out DISPLAY "Debits : " WS-Count-Out " " WS-Amount-Out MOVE WS-Credit-Count TO WS-Count-Out MOVE WS-Credit-Total TO WS-Amount-Out DISPLAY "Credits : " WS-Count-Out " " WS-Amount-Out MOVE WS-Bad-Count TO WS-Count-Out DISPLAY "Rejected : " WS-Count-Out COMPUTE WS-Net = WS-Credit-Total - WS-Debit-Total MOVE WS-Net TO WS-Net-Out DISPLAY "Net (CR - DR) : " WS-Net-Out.