COBOL access line-sequential dataset sample


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.




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值