This is a serial code samples of how COBOL access dataset
Line-sequential is something like a record-sequential dataset, except there is no record header for variable length, and all records are separated by a newline character.
There are some special attributes of line-sequential dataset.
- Line-sequential records are separated using newline char.
- There is no explicit difference between fixed line-sequential and variable line- sequential, except a record length can be returned when read a variable line-sequential dataset.
- Basically, line-sequential can be silently regarded as variable length
- Line-sequential dataset are whitespace tail trimmed. In other words, all whitespace at the line end are stripped.
Write Fixed-Length Line-Sequential Dataset
IDENTIFICATION DIVISION. PROGRAM-ID. WRITELINEF16. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT F16-FILE ASSIGN TO "DATA.LINEF16" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD F16-FILE LABEL RECORD STANDARD DATA RECORD DATAF16-REC. 01 DATAF16-REC. 03 F16-S-ID PIC X(02). 03 F16-S-NAME PIC X(04). 03 F16-S-VALUE PIC X(10). WORKING-STORAGE SECTION. PROCEDURE DIVISION. OPEN OUTPUT F16-FILE. MOVE "11" TO F16-S-ID. MOVE "AAAA" TO F16-S-NAME. MOVE "1234567890" TO F16-S-VALUE. WRITE DATAF16-REC. MOVE "22" TO F16-S-ID. MOVE "BBBB" TO F16-S-NAME. MOVE "123456789 " TO F16-S-VALUE. WRITE DATAF16-REC. MOVE "33" TO F16-S-ID. MOVE "CCCC" TO F16-S-NAME. MOVE "12345678" TO F16-S-VALUE. WRITE DATAF16-REC. CLOSE F16-FILE. STOP RUN.
Read Fixed-Length Line-Sequential Dataset
IDENTIFICATION DIVISION. PROGRAM-ID. READLINEF16. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT MW-ENTREE ASSIGN TO "DATA.LINEF16" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS IO-STATUS. DATA DIVISION. FILE SECTION. FD MW-ENTREE LABEL RECORD STANDARD DATA RECORD DATAF16-REC. 01 DATAF16-REC. 03 F16-S-ID PIC X(02). 03 F16-S-NAME PIC X(04). 03 F16-S-VALUE PIC X(10). WORKING-STORAGE SECTION. 01 IO-STATUS PIC XX. 01 REC-COUNT PIC 9(6). PROCEDURE DIVISION. OPEN INPUT MW-ENTREE. IF IO-STATUS NOT = "00" DISPLAY "OPEN INPUT FAILED" DISPLAY "IO-STATUS =" IO-STATUS GO TO FIN-REL END-IF. READ-SEQUENTIAL. MOVE SPACES TO DATAF16-REC. READ MW-ENTREE NEXT AT END GO TO FIN-REL END-READ. IF IO-STATUS NOT = "00" DISPLAY "READ RECORD FAILED" DISPLAY "IO-STATUS =" IO-STATUS GO TO FIN-REL END-IF. PERFORM DISPLAY-RECORD THRU E-DISPLAY-RECORD. GO TO READ-SEQUENTIAL. FIN-REL. CLOSE MW-ENTREE. EXIT PROGRAM. STOP RUN. DISPLAY-RECORD. DISPLAY "RECORD" ": S-ID=[" F16-S-ID "]" ", S-NAME=[" F16-S-NAME "]" ", S-VALUE=[" F16-S-VALUE "]". E-DISPLAY-RECORD. EXIT.
Write Variable-Length Line-Sequential Dataset
IDENTIFICATION DIVISION. PROGRAM-ID. WRITELINEV16. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT V16-FILE ASSIGN TO "DATA.LINEV16" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL. DATA DIVISION. FILE SECTION. FD V16-FILE LABEL RECORD STANDARD RECORD is VARYING in SIZE from 1 to 16 DEPENDING ON DATAV16-REC-LEN DATA RECORD DATAV16-REC. 01 DATAV16-REC. 03 V16-S-ID PIC X(02). 03 V16-S-NAME PIC X(04). 03 V16-S-VALUE PIC X(10). WORKING-STORAGE SECTION. 01 DATAV16-REC-LEN PIC X(4) COMP-X. PROCEDURE DIVISION. OPEN OUTPUT V16-FILE. MOVE "11" TO V16-S-ID. MOVE "AAAA" TO V16-S-NAME. MOVE "1234567890" TO V16-S-VALUE. MOVE 16 TO DATAV16-REC-LEN. WRITE DATAV16-REC. MOVE "22" TO V16-S-ID. MOVE "BBBB" TO V16-S-NAME. MOVE "123456789 " TO V16-S-VALUE. MOVE 16 TO DATAV16-REC-LEN. WRITE DATAV16-REC. MOVE "33" TO V16-S-ID. MOVE "CCCC" TO V16-S-NAME. MOVE "12345678" TO V16-S-VALUE. MOVE 14 TO DATAV16-REC-LEN. WRITE DATAV16-REC. CLOSE V16-FILE. STOP RUN.
Read Variable-Length Line-Sequential Dataset
IDENTIFICATION DIVISION. PROGRAM-ID. READLINEV16. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT MW-ENTREE ASSIGN TO "DATA.LINEV16" ORGANIZATION IS LINE SEQUENTIAL ACCESS MODE IS SEQUENTIAL FILE STATUS IS IO-STATUS. DATA DIVISION. FILE SECTION. FD MW-ENTREE LABEL RECORD STANDARD RECORD is VARYING in SIZE from 1 to 16 DEPENDING ON DATAV16-REC-LEN DATA RECORD DATAV16-REC. 01 DATAV16-REC. 03 V16-S-ID PIC X(02). 03 V16-S-NAME PIC X(04). 03 V16-S-VALUE PIC X(10). WORKING-STORAGE SECTION. 01 DATAV16-REC-LEN PIC X(4) COMP-X. 01 IO-STATUS PIC XX. 01 REC-COUNT PIC 9(6). PROCEDURE DIVISION. OPEN INPUT MW-ENTREE. IF IO-STATUS NOT = "00" DISPLAY "OPEN INPUT FAILED" DISPLAY "IO-STATUS =" IO-STATUS GO TO FIN-REL END-IF. READ-SEQUENTIAL. MOVE SPACES TO DATAV16-REC. READ MW-ENTREE NEXT AT END GO TO FIN-REL END-READ. IF IO-STATUS NOT = "00" DISPLAY "READ RECORD FAILED" DISPLAY "IO-STATUS =" IO-STATUS GO TO FIN-REL END-IF. PERFORM DISPLAY-RECORD THRU E-DISPLAY-RECORD. GO TO READ-SEQUENTIAL. FIN-REL. CLOSE MW-ENTREE. EXIT PROGRAM. STOP RUN. DISPLAY-RECORD. DISPLAY "RECORD" ": LENGTH=[" DATAV16-REC-LEN "]" ", S-ID=[" V16-S-ID "]" ", S-NAME=[" V16-S-NAME "]" ", S-VALUE=[" V16-S-VALUE "]". E-DISPLAY-RECORD. EXIT.