Reading — step 1 of 4
Learn
~1 min readSORT and File I/O
COBOL supports three main file organizations:
Sequential — records read/written in order. The simplest:
SELECT INPUT-FILE ASSIGN TO 'data.txt'
ORGANIZATION IS SEQUENTIAL
ACCESS MODE IS SEQUENTIAL.
FD INPUT-FILE.
01 IN-REC PIC X(80).
PROCEDURE DIVISION.
OPEN INPUT INPUT-FILE.
READ INPUT-FILE
AT END MOVE "Y" TO EOF-FLAG
NOT AT END DISPLAY IN-REC
END-READ.
CLOSE INPUT-FILE.
Indexed (ISAM) — random access by key:
SELECT CUST-FILE ASSIGN TO 'cust.dat'
ORGANIZATION IS INDEXED
ACCESS MODE IS DYNAMIC
RECORD KEY IS CUST-ID
ALTERNATE RECORD KEY IS CUST-EMAIL.
FD CUST-FILE.
01 CUST-REC.
05 CUST-ID PIC X(10).
05 CUST-EMAIL PIC X(50).
05 CUST-NAME PIC X(40).
*> Read by key:
MOVE "123" TO CUST-ID.
READ CUST-FILE. *> reads by primary key
Indexed files are basically a built-in B-tree DB. Used for master files in mainframe systems before relational DBs took over.
Relative — random access by record number:
SELECT FILE ASSIGN TO 'data.dat'
ORGANIZATION IS RELATIVE
RELATIVE KEY IS REC-NUM.
Open modes:
INPUT— read onlyOUTPUT— create/truncateI-O— read+write (indexed/relative)EXTEND— append
File status codes — tell you what happened:
SELECT INPUT-FILE ASSIGN ...
FILE STATUS IS WS-STATUS.
01 WS-STATUS PIC X(2).
OPEN INPUT INPUT-FILE.
IF WS-STATUS NOT = "00" THEN
DISPLAY "open failed: " WS-STATUS
END-IF.
Common codes: 00 (OK), 10 (EOF), 35 (file not found), 9x (varies).
For Judge0 (no real filesystem), use ACCEPT/DISPLAY for stdin/stdout. The patterns shown here apply on real mainframes and modern systems with filesystems.
Discussion
Ask a question, share an insight, or help someone who’s stuck.
Sign in to post a comment or reply.
Loading…