Перейти к основному содержимому
Модуль 5 · Урок 2 из 210/10 в курсе~15 min
Уроки модуля (2/2)

Операции файлового ввода-вывода

После того как файл связан и объявлен в DATA DIVISION, мы можем манипулировать им внутри PROCEDURE DIVISION. В COBOL управление жизненным циклом файлов происходит по стандартной, императивной схеме: открытие, выполнение операций (чтение или запись) и закрытие.


1. Открытие файлов: оператор OPEN

Прежде чем вы сможете читать или записывать файл, его необходимо открыть, указав соответствующий режим доступа:

COBOL
       OPEN INPUT SALES-FILE.

Основные режимы:

  • INPUT: файл открывается в режиме только для чтения. Файл должен существовать на диске, иначе программа не сможет работать.
  • OUTPUT: файл открывается в режиме записи. Если файл уже существует, его предыдущее содержимое удаляется (перезаписывается). Если его не существует, он создается.
  • EXTEND: файл открывается для добавления данных. Новые записи будут записываться начиная с конца существующего файла.
  • I-O: файл открывается как для чтения, так и для записи (в основном используется для файлов относительного или индексированного доступа, а не для файлов с линейной последовательностью).

2. Чтение данных: оператор READ

Чтобы прочитать запись из последовательного файла, мы используем оператор READ. Поскольку мы заранее не знаем, сколько записей содержит файл, мы всегда должны обрабатывать условие конца файла (EOF), используя предложение AT END:

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Загрузка…

Завершите РАЗДЕЛЕНИЕ ПРОЦЕДУРЫ, открыв ФАЙЛ ПРОДАЖ в режиме ВВОД, прочитав первую запись и установив для управляющей переменной WS-EOF значение «Y», когда будет достигнут конец файла. Наконец, не забудьте закрыть файл перед остановкой.

Загрузка редактора…
Показать подсказку

Напишите по порядку: ОТКРЫТЬ ВХОДНОЙ ФАЙЛ ПРОДАЖ. затем ПРОЧИТАЙТЕ ФАЙЛ ПРОДАЖ В КОНЦЕ, ПЕРЕМЕЩИТЕ 'Y' В WS-EOF END-READ. затем ЗАКРЫТЬ ФАЙЛ ПРОДАЖ. и, наконец, СТОП БЕГ.

Решение доступно после 3 попыток

Упражнение#cobol.m5.l2.e2
Попыток: 0Загрузка…

Завершите РАЗДЕЛЕНИЕ ПРОЦЕДУР, открыв ФАЙЛ ПРОДАЖ в режиме ВЫВОД. Переместите значение 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 попыток