文件处理动词用于对文件执行各种操作.以下是文件处理动词 :
Open
Read
Write
Rewrite
Delete
Start
Close
打开是必须执行的第一个文件操作.如果Open成功,则只能对文件进行进一步操作.只有在打开文件后,文件结构中的变量才可用于处理.每次文件操作后都会更新 FILE STATUS 变量.
打开"模式"文件名.
这里,文件名是字符串文字,您将用它来命名文件.可以在以下模式中打开文件 :
Sr.No. | 模式&描述 |
---|---|
1 | Input 输入模式用于现有文件.在这种模式下,我们只能读取文件,文件上不允许其他操作. |
2 | Output 输出模式用于在文件中插入记录.如果使用顺序文件并且文件保留了一些记录,则将首先删除现有记录,然后在文件中插入新记录.如果索引文件或相对文件,则不会发生这种情况. |
3 | Extend 扩展模式用于在顺序文件中追加记录.在此模式下,最后会插入记录.如果文件访问模式为随机或动态,则无法使用扩展模式. |
4 | IO 输入输出模式用于读取和重写文件的记录. |
读取动词用于读取文件记录. read的功能是从文件中获取记录.在每个读动词中,只能将一个记录读入文件结构.要执行读取操作,请在INPUT或I-O模式下打开文件.在每个读取语句中,文件指针递增,因此读取连续记录.
以下是读取记录时的语法文件访问模式是顺序 :
READ file-name NEXT RECORD INTO ws-file-structure AT END DISPLAY 'End of File' NOT AT END DISPLAY 'Record Details:' ws-file-structure END-READ.
以下是使用的参数 :
NEXT RECORD是可选的,在顺序读取索引顺序文件时指定.
INTO子句是可选的. ws-file-structure在WorkingStorage部分中定义,以从READ语句中获取值.
当到达文件末尾时,AT END条件变为True .
示例 : 以下示例使用行顺序组织读取现有文件.该程序可以使用 Live Demo 选项进行编译和执行,它将显示文件中的所有记录.
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT ASSIGN TO 'input.txt' ORGANIZATION IS LINE SEQUENTIAL. DATA DIVISION. FILE SECTION. FD STUDENT. 01 STUDENT-FILE. 05 STUDENT-ID PIC 9(5). 05 NAME PIC A(25). WORKING-STORAGE SECTION. 01 WS-STUDENT. 05 WS-STUDENT-ID PIC 9(5). 05 WS-NAME PIC A(25). 01 WS-EOF PIC A(1). PROCEDURE DIVISION. OPEN INPUT STUDENT. PERFORM UNTIL WS-EOF='Y' READ STUDENT INTO WS-STUDENT AT END MOVE 'Y' TO WS-EOF NOT AT END DISPLAY WS-STUDENT END-READ END-PERFORM. CLOSE STUDENT. STOP RUN.
假设 input.txt 文件中的输入文件数据包含以下 :
20003 Mohtashim M. 20004 Nishant Malik 20005 Amitabh Bachhan
你编译并执行上面的程序,它产生以下结果 :
20003 Mohtashim M. 20004 Nishant Malik 20005 Amitabh Bachhan
以下是文件访问模式为随机和减去时读取记录的语法;
READ file-name RECORD INTO ws-file-structure KEY IS rec-key INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'Record Details: ' ws-file-structure END-READ.
示例 : 以下示例使用索引组织读取现有文件.可以使用大型机上的 JCL 编译和执行该程序,它将显示文件中存在的所有记录.在大型机服务器上,我们不使用文本文件;相反,我们使用PS文件.
让我们假设大型机上的文件与上面例子中的input.txt文件具有相同的内容.
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT ASSIGN TO IN1 ORGANIZATION IS INDEXED ACCESS IS RANDOM RECORD KEY IS STUDENT-ID FILE STATUS IS FS. DATA DIVISION. FILE SECTION. FD STUDENT. 01 STUDENT-FILE. 05 STUDENT-ID PIC 9(5). 05 NAME PIC A(25). WORKING-STORAGE SECTION. 01 WS-STUDENT. 05 WS-STUDENT-ID PIC 9(5). 05 WS-NAME PIC A(25). PROCEDURE DIVISION. OPEN INPUT STUDENT. MOVE 20005 TO STUDENT-ID. READ STUDENT RECORD INTO WS-STUDENT-FILE KEY IS STUDENT-ID INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY WS-STUDENT-FILE END-READ. CLOSE STUDENT. STOP RUN.
JCL 执行上述COBOL程序 :
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //IN1 DD DSN = STUDENT-FILE-NAME,DISP=SHR
编译并执行上述程序时,它会产生以下结果 :
20005 Amitabh Bachhan
写动词用于在a中插入记录文件.写入记录后,记录缓冲区中不再可用.在将记录插入文件之前,将值移动到记录缓冲区然后执行write动词.
Write语句可以与 FROM 选项一起使用来直接写入记录来自工作存储变量. From是一个可选条款.如果访问模式是顺序的,那么要写入记录,文件必须在输出模式或扩展模式下打开.如果访问模式是随机的或动态的,那么要写入记录,文件必须在输出模式或IO模式下打开.
关注是文件组织顺序&减去时读取记录的语法;
WRITE record-buffer [FROM ws-file-structure] END-WRITE.
以下是在索引文件组织或相对&减去时读取记录的语法;
WRITE record-buffer [FROM ws-file-structure] INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'Record Inserted' END-WRITE.
示例 : 以下示例显示了在组织顺序时如何在新文件中插入新记录.
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT ASSIGN TO OUT1 ORGANIZATION IS SEQUENTIAL ACCESS IS SEQUENTIAL FILE STATUS IS FS. DATA DIVISION. FILE SECTION. FD STUDENT 01 STUDENT-FILE. 05 STUDENT-ID PIC 9(5). 05 NAME PIC A(25). 05 CLASS PIC X(3). WORKING-STORAGE SECTION. 01 WS-STUDENT. 05 WS-STUDENT-ID PIC 9(5). 05 WS-NAME PIC A(25). 05 WS-CLASS PIC X(3). PROCEDURE DIVISION. OPEN EXTEND STUDENT. MOVE 1000 TO STUDENT-ID. MOVE 'Tim' TO NAME. MOVE '10' TO CLASS. WRITE STUDENT-FILE END-WRITE. CLOSE STUDENT. STOP RUN.
JCL 执行上述COBOL程序 :
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = (NEW,CATALOG,DELETE)
编译并执行上述程序时,它会在输出文件中添加一条新记录.
1000 Tim 10
重写动词用于更新记录.应在I-O模式下打开文件以进行重写操作.只有在成功读取操作后才能使用它.重写动词会覆盖最后读取的记录.
以下是文件组织顺序和减去时读取记录的语法;
REWRITE record-buffer [FROM ws-file-structure] END-REWRITE.
以下是在索引文件组织或相对&减去时读取记录的语法;
REWRITE record-buffer [FROM ws-file-structure] INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'Record Updated' END-REWRITE.
示例 : 以下示例显示如何更新我们在上一个写入步骤中插入的现有记录 :
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT ASSIGN TO IN1 ORGANIZATION IS INDEXED ACCESS IS RANDOM RECORD KEY IS STUDENT-ID FILE STATUS IS FS. DATA DIVISION. FILE SECTION. FD STUDENT 01 STUDENT-FILE. 05 STUDENT-ID PIC 9(4). 05 NAME PIC A(12). 05 CLASS PIC X(3). WORKING-STORAGE SECTION. 01 WS-STUDENT. 05 WS-STUDENT-ID PIC 9(5). 05 WS-NAME PIC A(25). 05 WS-CLASS PIC X(3). PROCEDURE DIVISION. OPEN I-O STUDENT. MOVE '1000' TO STUDENT-ID. READ STUDENT KEY IS STUDENT-ID INVALID KEY DISPLAY ‘KEY IS NOT EXISTING’ END-READ. MOVE 'Tim Dumais' TO NAME. REWRITE STUDENT-FILE END-REWRITE. CLOSE STUDENT. STOP RUN.
JCL 执行上述COBOL程序 :
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //IN1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
编译并执行上述程序时,它将更新记录 :
1000 Tim Dumais 10
删除动词只能在索引时执行和相关文件.必须以I-O模式打开该文件.在顺序文件组织中,无法删除记录.在顺序访问模式的情况下,将删除Read语句最后读取的记录.在随机访问模式下,指定记录键,然后执行删除操作.
以下是删除记录的语法 :
DELETE file-name RECORD INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'Record Deleted' END-DELETE.
示例 : 删除现有记录 :
IDENTIFICATION DIVISION. PROGRAM-ID. HELLO. ENVIRONMENT DIVISION. INPUT-OUTPUT SECTION. FILE-CONTROL. SELECT STUDENT ASSIGN TO OUT1 ORGANIZATION IS INDEXED ACCESS IS RANDOM RECORD KEY IS STUDENT-ID FILE STATUS IS FS. DATA DIVISION. FILE SECTION. FD STUDENT 01 STUDENT-FILE. 05 STUDENT-ID PIC 9(4). 05 NAME PIC A(12). 05 CLASS PIC X(3). WORKING-STORAGE SECTION. 01 WS-STUDENT. 05 WS-STUDENT-ID PIC 9(5). 05 WS-NAME PIC A(25). 05 WS-CLASS PIC X(3). PROCEDURE DIVISION. OPEN I-O STUDENT. MOVE '1000' TO STUDENT-ID. DELETE STUDENT RECORD INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'Record Deleted' END-DELETE. CLOSE STUDENT. STOP RUN.
JCL 执行上述COBOL程序 :
//SAMPLE JOB(TESTJCL,XXXXXX),CLASS = A,MSGCLASS = C //STEP1 EXEC PGM = HELLO //OUT1 DD DSN = OUTPUT-FILE-NAME,DISP = SHR
编译并执行上述程序时,它会产生以下结果 :
Record Deleted
开始动词只能在索引和相对上执行文件.它用于将文件指针放在特定记录上.访问模式必须是顺序的或动态的.必须在IO或输入模式下打开文件.
以下是将指针放在特定记录上的语法 :
START file-name KEY IS [=, >, <, NOT, <= or >=] rec-key INVALID KEY DISPLAY 'Invalid Key' NOT INVALID KEY DISPLAY 'File Pointer Updated' END-START.
关闭动词用于关闭文件.执行关闭操作后,文件结构中的变量将无法进行处理.程序和文件之间的链接丢失.
以下是关闭文件的语法 :
CLOSE file-name.