Created
September 28, 2025 22:11
-
-
Save jmsdnns/832566ec23c05be1bbcec6a6231f1576 to your computer and use it in GitHub Desktop.
had claude generate a csv reader in cobol
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| IDENTIFICATION DIVISION. | |
| PROGRAM-ID. CSV-READER. | |
| ENVIRONMENT DIVISION. | |
| INPUT-OUTPUT SECTION. | |
| FILE-CONTROL. | |
| SELECT CSV-FILE ASSIGN TO "input.csv" | |
| ORGANIZATION IS LINE SEQUENTIAL. | |
| DATA DIVISION. | |
| FILE SECTION. | |
| FD CSV-FILE. | |
| 01 CSV-RECORD PIC X(200). | |
| WORKING-STORAGE SECTION. | |
| 01 WS-EOF-FLAG PIC X VALUE 'N'. | |
| 01 WS-RECORD-COUNT PIC 9(5) VALUE ZERO. | |
| 01 WS-FIELD-COUNT PIC 9(2) VALUE ZERO. | |
| 01 WS-FIELD-START PIC 9(3) VALUE 1. | |
| 01 WS-FIELD-END PIC 9(3) VALUE ZERO. | |
| 01 WS-FIELD-LENGTH PIC 9(3) VALUE ZERO. | |
| 01 WS-FIELD-VALUE PIC X(50). | |
| 01 WS-COMMA-POS PIC 9(3) VALUE ZERO. | |
| 01 WS-CURRENT-POS PIC 9(3) VALUE 1. | |
| 01 WS-RECORD-LENGTH PIC 9(3) VALUE ZERO. | |
| 01 WS-PARSED-FIELDS. | |
| 05 WS-FIELD OCCURS 10 TIMES PIC X(50). | |
| PROCEDURE DIVISION. | |
| MAIN-PROCEDURE. | |
| OPEN INPUT CSV-FILE | |
| PERFORM UNTIL WS-EOF-FLAG = 'Y' | |
| READ CSV-FILE | |
| AT END | |
| MOVE 'Y' TO WS-EOF-FLAG | |
| NOT AT END | |
| ADD 1 TO WS-RECORD-COUNT | |
| PERFORM PARSE-CSV-RECORD | |
| PERFORM DISPLAY-PARSED-FIELDS | |
| END-READ | |
| END-PERFORM | |
| CLOSE CSV-FILE | |
| DISPLAY "Total records processed: " WS-RECORD-COUNT | |
| STOP RUN. | |
| PARSE-CSV-RECORD. | |
| MOVE ZERO TO WS-FIELD-COUNT | |
| MOVE 1 TO WS-CURRENT-POS | |
| COMPUTE WS-RECORD-LENGTH = FUNCTION LENGTH( | |
| FUNCTION TRIM(CSV-RECORD)) | |
| PERFORM UNTIL WS-CURRENT-POS > WS-RECORD-LENGTH | |
| PERFORM FIND-NEXT-COMMA | |
| ADD 1 TO WS-FIELD-COUNT | |
| IF WS-COMMA-POS = ZERO | |
| COMPUTE WS-FIELD-LENGTH = | |
| WS-RECORD-LENGTH - WS-CURRENT-POS + 1 | |
| MOVE CSV-RECORD(WS-CURRENT-POS:WS-FIELD-LENGTH) | |
| TO WS-FIELD(WS-FIELD-COUNT) | |
| MOVE WS-RECORD-LENGTH TO WS-CURRENT-POS | |
| ELSE | |
| COMPUTE WS-FIELD-LENGTH = | |
| WS-COMMA-POS - WS-CURRENT-POS | |
| IF WS-FIELD-LENGTH > ZERO | |
| MOVE CSV-RECORD(WS-CURRENT-POS:WS-FIELD-LENGTH) | |
| TO WS-FIELD(WS-FIELD-COUNT) | |
| ELSE | |
| MOVE SPACES TO WS-FIELD(WS-FIELD-COUNT) | |
| END-IF | |
| COMPUTE WS-CURRENT-POS = WS-COMMA-POS + 1 | |
| END-IF | |
| ADD 1 TO WS-CURRENT-POS | |
| END-PERFORM. | |
| FIND-NEXT-COMMA. | |
| MOVE ZERO TO WS-COMMA-POS | |
| PERFORM VARYING WS-COMMA-POS FROM WS-CURRENT-POS BY 1 | |
| UNTIL WS-COMMA-POS > WS-RECORD-LENGTH | |
| OR CSV-RECORD(WS-COMMA-POS:1) = "," | |
| END-PERFORM | |
| IF WS-COMMA-POS > WS-RECORD-LENGTH | |
| MOVE ZERO TO WS-COMMA-POS | |
| END-IF. | |
| DISPLAY-PARSED-FIELDS. | |
| DISPLAY "Record " WS-RECORD-COUNT ":" | |
| PERFORM VARYING WS-CURRENT-POS FROM 1 BY 1 | |
| UNTIL WS-CURRENT-POS > WS-FIELD-COUNT | |
| DISPLAY " Field " WS-CURRENT-POS ": [" | |
| FUNCTION TRIM(WS-FIELD(WS-CURRENT-POS)) "]" | |
| END-PERFORM | |
| DISPLAY SPACE. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment