Skip to content
File Organization
step 1/4

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 only
  • OUTPUT — create/truncate
  • I-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…