COBOL access Relative dataset sample

This is a serial code samples of how COBOL access dataset


Write a Relative Dataset

       IDENTIFICATION DIVISION.
       PROGRAM-ID. WRITERELXF16.
       ENVIRONMENT DIVISION.
       INPUT-OUTPUT SECTION.
       FILE-CONTROL.
       SELECT FILE-F16
              ASSIGN TO RELFILE
              ORGANIZATION IS RELATIVE
              ACCESS IS DYNAMIC
              RELATIVE KEY IS REL-KEY
              FILE STATUS IS IO-STATUS.
      
       DATA DIVISION.
       FILE SECTION.
      
       FD  FILE-F16
           LABEL RECORD STANDARD
           DATA RECORD DATAF16-REC.
       01 DATAF16-REC.
         03 S-ID    PIC X(02).
         03 S-NAME  PIC X(04).
         03 S-VALUE PIC X(10).
      *COPY DATAF16.

       WORKING-STORAGE SECTION.
       01  IO-STATUS                  PIC XX.
       01  REL-KEY                    PIC 9(8).
      
       PROCEDURE DIVISION.
       P-START.
           OPEN OUTPUT FILE-F16
           IF IO-STATUS NOT = "00"
             DISPLAY "FILELD-0202: OUTPUT FAILED"
             DISPLAY "ASSIGN: SORTIE"
             DISPLAY "IO-STATUS =" IO-STATUS
             GO TO FIN-ERREUR
           END-IF.
      
       WRITE-1.
           MOVE 1 TO REL-KEY.
           MOVE SPACES      TO DATAF16-REC.
           MOVE "55"        TO S-ID.
           MOVE "EEEE"      TO S-NAME.
           MOVE "eeeeeeeeee"  TO S-VALUE.
           WRITE DATAF16-REC
            INVALID KEY
             DISPLAY "ERROR:"
 Error       DISPLAY "FILELD-0203: WRITE FAILED"
 Error       DISPLAY "ASSIGN: SORTIE"
             DISPLAY "IO-STATUS =" IO-STATUS
             GO TO FIN-ERREUR
           END-WRITE.

       WRITE-2.
           MOVE 2 TO REL-KEY.
           MOVE SPACES      TO DATAF16-REC.
           MOVE "44"        TO S-ID.
           MOVE "DDDD"      TO S-NAME.
           MOVE "dddddddddd"  TO S-VALUE.
           WRITE DATAF16-REC
            INVALID KEY
             DISPLAY "ERROR:"
 Error       DISPLAY "FILELD-0203: WRITE FAILED"
 Error       DISPLAY "ASSIGN: SORTIE"
             DISPLAY "IO-STATUS =" IO-STATUS
             GO TO FIN-ERREUR
           END-WRITE.
 
       WRITE-3.
           MOVE 3 TO REL-KEY.
           MOVE SPACES      TO DATAF16-REC.
           MOVE "33"        TO S-ID.
           MOVE "CCCC"      TO S-NAME.
           MOVE "cccccccccc"  TO S-VALUE.
           WRITE DATAF16-REC
            INVALID KEY
             DISPLAY "ERROR:"
 Error       DISPLAY "FILELD-0203: WRITE FAILED"
 Error       DISPLAY "ASSIGN: SORTIE"
             DISPLAY "IO-STATUS =" IO-STATUS
             GO TO FIN-ERREUR
           END-WRITE.

       FIN-REL.
           DISPLAY "WRITE DONE".
           PERFORM END-COMMON-DISPLAY.
      
           EXIT PROGRAM.
           STOP RUN.
      
       FIN-ERREUR.
           DISPLAY "WRITE FAILED".
           PERFORM END-COMMON-DISPLAY.
      
           EXIT PROGRAM.
           STOP RUN RETURNING 1.
      
       END-COMMON-DISPLAY.
           CLOSE FILE-F16.


Read a Relative Dataset

       IDENTIFICATION   DIVISION.
       PROGRAM-ID.      READRELF16.
       ENVIRONMENT      DIVISION.
       INPUT-OUTPUT     SECTION.
       FILE-CONTROL.
         SELECT REL-FILE ASSIGN TO RELFILE
            ORGANIZATION IS RELATIVE 
      *     ACCESS MODE IS RANDOM          
            ACCESS MODE IS DYNAMIC
            RELATIVE KEY REL-KEY
            FILE STATUS IS IO-STATUS.

       DATA DIVISION.
       FILE SECTION.
         FD  REL-FILE
             LABEL RECORD STANDARD
             DATA RECORD DATAF16-REC.
         01 DATAF16-REC.
             03 S-ID     PIC X(02).
             03 S-NAME   PIC X(04).
             03 S-VALUE  PIC X(10).

       WORKING-STORAGE SECTION.
         01  IO-STATUS   PIC XX.
         01  REL-KEY  PIC 9(8).

       PROCEDURE DIVISION.
            OPEN INPUT REL-FILE.
            IF IO-STATUS NOT = "00"
                DISPLAY "OPEN INPUT FAILED"
                DISPLAY "IO-STATUS =" IO-STATUS
                GO TO FIN-REL
            END-IF.

         DISPLAY "------------READ SEQUENTIAL------------".
         READ-SEQUENTIAL.
            MOVE SPACES TO DATAF16-REC.
            READ REL-FILE NEXT
              AT END GO TO READ-KEY
            END-READ.
            PERFORM DISPLAY-RECORD THRU E-DISPLAY-RECORD.
            GO TO READ-SEQUENTIAL.

         READ-KEY.
              MOVE 2 TO REL-KEY.
              DISPLAY "------------READ RRN(" REL-KEY ")------------".
              READ REL-FILE
              IF IO-STATUS NOT = "00"
                DISPLAY "READ FAILED"
                DISPLAY "IO-STATUS =" IO-STATUS
                GO TO FIN-REL
              END-IF.
              PERFORM DISPLAY-RECORD THRU E-DISPLAY-RECORD.
 
         FIN-REL.
      *     DISPLAY "Done".

            CLOSE REL-FILE.
      
            EXIT PROGRAM.
            STOP RUN.

         DISPLAY-RECORD.
           DISPLAY "RECORD" ": S-ID=" S-ID
                            ", S-NAME=" S-NAME
                            ", S-VALUE=" S-VALUE.
         E-DISPLAY-RECORD.
           EXIT.


Execute Result:


$ cobrun READRELF16  
------------READ SEQUENTIAL------------
RECORD: S-ID=55, S-NAME=EEEE, S-VALUE=eeeeeeeeee
RECORD: S-ID=44, S-NAME=DDDD, S-VALUE=dddddddddd
RECORD: S-ID=33, S-NAME=CCCC, S-VALUE=cccccccccc
------------READ RRN(00000002)------------
RECORD: S-ID=44, S-NAME=DDDD, S-VALUE=dddddddddd


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值