跳转到主要内容
模块 5 · 第 2 课(共 2)课程中的10/10~15 min
模块课程(2/2)

文件 I/O 操作

一旦文件在 DATA DIVISION 中关联并声明,我们就可以在 PROCEDURE DIVISION 中操作它。在 COBOL 中,管理文件的生命周期遵循标准的命令式流程:打开、执行操作(读或写)和关闭。


1. 打开文件:OPEN 语句

在读取或写入文件之前,必须通过指定适当的访问模式将其打开:

COBOL
       OPEN INPUT SALES-FILE.

主要模式有:

  • INPUT:文件以只读模式打开。该文件必须存在于磁盘上,否则程序将失败。
  • OUTPUT:文件以写入模式打开。如果文件已存在,则删除(覆盖)其先前的内容。如果不存在,则创建它。
  • EXTEND:打开文件以追加数据。新记录将从现有文件的末尾开始写入。
  • I-O:文件以读写方式打开(主要用于相对或索引访问文件,而不是线性顺序文件)。

2. 读取数据:READ 语句

要从顺序文件中读取记录,我们使用 READ 语句。由于我们事先不知道文件包含多少条记录,因此我们必须始终使用 AT END 子句处理文件结束 (EOF) 条件:

COBOL
       READ SALES-FILE
           AT END MOVE "Y" TO WS-EOF
       END-READ.
  • READ SALES-FILE:请注意,该语句引用逻辑文件名(在 SELECT 和 FD 子句中定义),而不是记录名称。
  • AT END:指定当您尝试读取最后一条可用记录时要运行的指令。通常,您将标志变量(如 WS-EOF)设置为 "Y"。
  • END-READ:显式终止读取语句。

3. 写入数据:WRITE 语句

要将数据插入文件,我们使用 WRITE 语句。

[!警告] 在 COBOL 中,您读取 文件 (READ SALES-FILE),但写入 记录 (WRITE SALES-RECORD)。编写 WRITE SALES-FILE 是一种常见的语法错误,会阻止编译。

COBOL
       MOVE 1001 TO EMP-ID.
       MOVE "MARIO ROSSI" TO EMP-NAME.
       WRITE SALES-RECORD.

在执行 WRITE 语句之前,必须将 FD 记录结构的从属字段(在本例中为 SALES-RECORD)填充到内存中。


4. 关闭文件:CLOSE 语句

处理完成后,必须关闭每个打开的文件以释放系统资源并确保所有数据都写入磁盘:

COBOL
       CLOSE SALES-FILE.

请注意,CLOSE 语句将逻辑文件名作为其参数,而不是记录名称。


尝试一下

锻炼#cobol.m5.l2.e1
尝试:0加载中...

通过在输入模式下打开 SALES-FILE、读取第一条记录并在到达文件末尾时将 WS-EOF 控制变量设置为“Y”来完成 PROCEDURE DIVISION。最后,记住在停止之前关闭文件。

正在加载编辑器...
显示提示

按顺序写入:OPEN INPUT SALES-FILE。然后在末尾读取销售文件,将“Y”移动到 WS-EOF END-READ。然后关闭销售文件。最后停止运行。

3 次尝试后可用的解决方案

锻炼#cobol.m5.l2.e2
尝试:0加载中...

通过在 OUTPUT 模式下打开 SALES-FILE 来完成 PROCEDURE DIVISION。将值 1001 移至 SALES-ID,将 250.50 移至 SALES-AMOUNT,然后将 SALES-RECORD 写入文件。最后,在停止程序之前关闭该文件。

正在加载编辑器...
显示提示

使用 OPEN OUTPUT SALES-FILE. 打开文件,使用 MOVE 为 SALES-ID 和 SALES-AMOUNT 赋值,执行 WRITE SALES-RECORD。 (写入记录,而不是文件!),用 CLOSE SALES-FILE 关闭。并用 STOP RUN 终止。

3 次尝试后可用的解决方案