COBOL+CICS文件操作

来源:互联网 发布:吉他入门 知乎 编辑:程序博客网 时间:2024/06/05 10:19

1.输入输出数据
非CICS:
ACCEPT数据来源:终端输入和系统接收。
一般系统接收数据为日期或者时间。
DATE--YYMMDD.
DAY---YYDDD.
DAY-OF-WEEK--- PIC 9. 范围1-7.
TIME---HHMMSSHH,最后HH表示hundredths from midnigth.
如:DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 INPUT-DATE.
       05 INPUT-YEAR  PIC 99.
       05 INPUT-MONTH PIC 99.
       05 INPUT-DAY   PIC 99.
   *
    PROCEDURE DIVISION.
       ...
       ACCEPT TEST-DATE.
       DISPLAY TEST-DATE. ---终端输入的数据
       ACCEPT TEST-DATE FROM DATE. --系统产生的数据
       DISPLAY TEST-DATE. --输出
CICS下:
如:DATA DIVISION.
    WORKING-STORAGE SECTION.
    01 INFLDS.
       05 INLEN       PIC 9(4) COMP.
    01 INPUT-NAME.
       05 INPUT-FIRST  PIC X(10).
       05 INPUT-MIDDLE PIC X(10).
       05 INPUT-LAST   PIC X(10).
   *PROCEDURE DIVISION.
       ...
       MOVE 15 TO INLEN.
       EXEC CICS RECEIVE INTO(INPUT-NAME)
                         LENGTH(INLEN) --所接收的最大长度,小于为实际,大于为异常
       END-EXEC.
       EXEC CICS SEND    FROM(INPUT-NAME)
                         LENGTH(20) --为实际长度,并非变量。输出位置为当前光标位置
       END-EXEC.
       ...
       GOBACK.
       
2.文件操作
普通文件非CICS:
如:ENVIRONMENT DIVISION.
    INPUT-OUTPUT SECTION.
    FILE-CONTROL
     SELECT CUSTOMER-FILE ASSIGN TO S-SYSIN.   --定义对应到COBOL文件名
     SELECT PRINT-FILE    ASSIGN TO S-SYSOUT.
   *
    DATA DIVISION.
    FILE SECTION.
    FD CUSTOMER-FILE   --定义FD记录
       RECORD MODE IS F.
    01 CUSTOMER-RECORD.
       05 CUST-NO   PIC 9(5).
       05 CUST-NAME PIC X(10).
    FD PRINT-FILE.
       RECORD MODE IS F.
       LABEL RECORDS ARE OMITTED
       RECORD CONTAINS 132 CHARACTERS
       DATA RECORD IS PRINT-LINE.  --定义数据记录在程序中的名称
    01 PRINT-LINE   PIC X(132).
    WORKING-STORAGE SECTION.
    01 EOF-FLAG     PIC X VALUE 'N'.
    01 HEADING-LINE.
       05 FILLER    PIC X(5) VALUE SPACES.
       05 FILLER    PIC X(15) VALUE 'CUSTOMER NO'.
       05 FILLER    PIC X(7) VALUE SPACE.
       05 FILLER    PIC X(15) VALUE 'CUSTOMER NAME'.
       05 FILLER    PIC X(90).
    01 OUTPUT-FILE.
       05 FILLER    PIC X(10) VALUE SPACES.
       05 PRT-NO    PIC X(5).
       05 FILLER    PIC X(15) VALUE SPACES.
       05 PRT-NAME  PIC X(10).
       05 FILLER    PIC X(92).
   *
    PROCEDURE DIVISION.
       OPEN INPUT CUSTOMER-FILE ---OPEN语句可以指出该文件时输入还是输出文件。
             OUTPUT PRINT-FILE.
     也可以直接读到其他地方。      
       READ CUSTOMER-FILE  --READ后为文件名,而WRITE为记录
          AT END MOVE 'Y' TO EOF-FLAG  --AT END-读到末尾所要采取的操作。
       END-READ.
       MOVE HEADING-LINE TO PRINT-LINE.
       WRITE PRINT-LINE.
       PERFORM 100-PROCESS-RECORDS
          UNTIL EOF-FLG = 'Y'
       CLOSE CUSTOMER-FILE
             PRINT-FILE.
          STOP RUN.
    100-PROCESS-RECORDS.
       IF CUST-NO > 100
          MOVE CUST-NO TO PRT-NO.
          MOVE CUST-NAME TO PRT-NAME.
          WRITE PRINT-LINE FROM OUTPUT-LINE
         
       END-IF
       READ CUSTOMER-FILE
          AT END MOVE 'Y' TO EOF-FLAY
       END-READ.
       
VSAM文件非CICS
如:ENVIRONMENT DIVISION.                     
    INPUT-OUTPUT SECTION.                     
    FILE-CONTROL.                             
     SELECT KS-FILE ASSIGN TO VKSDS        
        SELECT OPTIONAL MACC ASSIGN TO KSDSFILE
            ORGANIZATION INDEXED --逻辑结构,通常为顺序或索引          
            ACCESS MODE DYNAMIC  --访问方式,顺序,直接,动态(包括前面两个)          
            RECORD KEY TEST-NO  --文件中的KEY
            FILE STATUS TEST-STAT.  --反应读取或写入的状态              
                                           
    DATA DIVISION.                            
    FILE SECTION.
    FD KS-FILE01      
       LABEL RECORD IS STANDARD  --指明该VSAM文件是否含有标号。
      DATA RECORD IS TEST1.  --定义该VSAM逻辑记录在程序中的名称。
    01 TEST1.                                   
       05 TEST1-NO               PIC X(5).          
       05 TEST1-NAME             PIC X(10).
    ...
   *
    PROCEDURE DIVISION.
       OPEN INPUT KS-FILE01,KS-FILE02  --只可以WRITE
            I-O   RR-FILE               --可以REWRITE
            OUTPUT ES-FILE.
       READ KS-FILE01 NEXT RECORD
          AT END GO TO 100-TEST-END
       END-READ.
       READ KS-FILE01 KEY IS TEST-NO
                    INVALID KEY GO TO 200-TEST-END  --指定INVALID语句
       END-READ.
       WRITE KS01-RCD FROM TEST1.
       REWRITE RR-RCD FROM TESTX.
       DELETE KS-FILE01 RECORD INVALID KEY ... --删除
       START KS-FILE KEY < TEST-NO       --指针定位
          DISPLAY '....'      
       CLOSE KS-FILE01,KS-FILE02,RR-FILE,ES-FILE.
    
VSAM文件CICS中:
不用手工定义和打开,有CICIS中FCT-文件控制表统一管理。
如:DATA DIVISION
    01 FILE-AREA.
       05 RECL    PIC S9(4) COMP.
       05 RECKEY  PIC X(6).
    01 REC-FIELD.
       05 F-CODE PIC X(10) VALUE SPACES.
       05 F-NAME PIC X(20) VALUE SPACES.
    ...
读:READ
    EXEC CICS READ FILE('TESTF') --文件名
                  INTO(REC-FIELD) --记录名
                   RIDFLD(RECKEY) --KEY名(KSDS-KEY,ESDS-RBA,RRDS-RRN)
                   LENGTH(RECL)  --文件中逻辑记录长度
                   RESP(ERR-CODE) --返回码
    END-EXEC.
写:一般用REWRITE,先UPDATE锁定,再REWRITE.
    EXEC CICS READ FILE('TESTF')
                  UPDATE      --先UPDATE锁定
                   RIDFLD(RECKEY)
                   INTO(REC-FIELD)
                   LENGTH(RECL)
                   RESP(ERR-CODE)
    END-EXEC.
    EXEC CICS REWRITE FILE('TESTF')   --不用指定KEY了,上面UPDATE已经锁定,KEY也不能被更改
                     FROM(REC-FIELD)
                      LENGTH(RECL)
                      RESP(ERR-CODE)
    END-EXEC/
浏览:STARTBR, READNEXT ,ENDBR.
    EXEC CICS STARTBR FILE('TESTF')
                      RIDFLD(RECKEY)
                      RESP(ERR-CODE)
    END-EXEC
    IF ERR-CODE EQUAL DFHRESP(NORMAL)
       PERFORM UNTIL ERR-CODE EQUAL DFHRESP(ENDFILE)
          EXEC CICS READNEXT FILE('TESTF')
                             INTO(REC-FIELD)
                             LENGTH(RECL)
                             RIDFLD(RECKEY)
                             RESP(ERR-CODE)
          END-EXEC.
          ...
       END-PERFORM
       EXEC CICS ENDBR FILE('TESTF')
       END-EXEC.

http://blog.sina.com.cn/s/blog_9cc425da0100zr8x.html

原创粉丝点击