ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT INPUT-FILE ASSIGN TO "input.dat" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WS-INPUT-STATUS.
关键子句
子句
说明
SELECT 文件名
定义逻辑文件名
ASSIGN TO "路径"
关联物理文件
ORGANIZATION IS ...
文件组织方式
ACCESS MODE IS ...
访问模式(SEQUENTIAL/RANDOM/DYNAMIC)
RECORD KEY IS ...
索引文件的主键
FILE STATUS IS ...
存储操作状态码的变量
ORGANIZATION 取值
1 2 3 4
ORGANIZATION IS LINE SEQUENTIAL *> 行顺序(文本文件,最常用) ORGANIZATION IS SEQUENTIAL *> 记录顺序(定长) ORGANIZATION IS INDEXED *> 索引文件 ORGANIZATION IS RELATIVE *> 相对文件
OPEN INPUT INPUT-FILE. *> 只读 OPEN OUTPUT OUTPUT-FILE. *> 只写(会清空原文件) OPEN EXTEND OUTPUT-FILE. *> 追加 OPEN I-O DATA-FILE. *> 读写
读取记录
1 2 3 4
READ INPUT-FILE AT END MOVE 1 TO WS-EOF NOT AT END PERFORM PROCESS-RECORD END-READ.
写入记录
1 2
MOVE "Hello" TO OUT-LINE. WRITE OUTPUT-RECORD.
关闭文件
1 2
CLOSE INPUT-FILE. CLOSE OUTPUT-FILE.
5. 索引文件操作
索引文件支持按键随机访问。
声明
1 2 3 4 5 6 7
FILE-CONTROL. SELECT CUSTOMER-FILE ASSIGN TO "customer.dat" ORGANIZATION IS INDEXED ACCESS MODE IS DYNAMIC RECORD KEY IS CUST-ID FILE STATUS IS WS-STATUS.
MOVE LOW-VALUES TO CUST-ID START CUSTOMER-FILE KEY >= CUST-ID PERFORM UNTIL WS-EOF = 1 READ CUSTOMER-FILE NEXT AT END MOVE 1 TO WS-EOF NOT AT END DISPLAY CUST-ID " " CUST-NAME END-READ END-PERFORM.
6. 相对文件操作
相对文件用记录号(1, 2, 3…)访问:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16
FILE-CONTROL. SELECT REL-FILE ASSIGN TO "relative.dat" ORGANIZATION IS RELATIVE ACCESS MODE IS RANDOM RELATIVE KEY IS WS-REC-NUM.
IDENTIFICATION DIVISION. PROGRAM-ID. FILE-DEMO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT IN-FILE ASSIGN TO "input.txt" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WS-IN-STATUS. SELECT OUT-FILE ASSIGN TO "output.txt" ORGANIZATION IS LINE SEQUENTIAL FILE STATUS IS WS-OUT-STATUS. DATA DIVISION. FILE SECTION. FD IN-FILE. 01 IN-RECORD PIC X(80). FD OUT-FILE. 01 OUT-RECORD PIC X(80). WORKING-STORAGE SECTION. 01 WS-IN-STATUS PIC XX. 01 WS-OUT-STATUS PIC XX. 01 WS-EOF PIC 9 VALUE 0. PROCEDURE DIVISION. MAIN-PROCEDURE. OPEN INPUT IN-FILE OPEN OUTPUT OUT-FILE PERFORM UNTIL WS-EOF = 1 READ IN-FILE AT END MOVE 1 TO WS-EOF NOT AT END MOVE IN-RECORD TO OUT-RECORD WRITE OUT-RECORD END-READ END-PERFORM CLOSE IN-FILE CLOSE OUT-FILE DISPLAY "文件复制完成" STOP RUN.