Уроки модуля (2/2)
Операции файлового ввода-вывода
После того как файл связан и объявлен в DATA DIVISION, мы можем манипулировать им внутри PROCEDURE DIVISION. В COBOL управление жизненным циклом файлов происходит по стандартной, императивной схеме: открытие, выполнение операций (чтение или запись) и закрытие.
1. Открытие файлов: оператор OPEN
Прежде чем вы сможете читать или записывать файл, его необходимо открыть, указав соответствующий режим доступа:
OPEN INPUT SALES-FILE.Основные режимы:
INPUT: файл открывается в режиме только для чтения. Файл должен существовать на диске, иначе программа не сможет работать.OUTPUT: файл открывается в режиме записи. Если файл уже существует, его предыдущее содержимое удаляется (перезаписывается). Если его не существует, он создается.EXTEND: файл открывается для добавления данных. Новые записи будут записываться начиная с конца существующего файла.I-O: файл открывается как для чтения, так и для записи (в основном используется для файлов относительного или индексированного доступа, а не для файлов с линейной последовательностью).
2. Чтение данных: оператор READ
Чтобы прочитать запись из последовательного файла, мы используем оператор READ. Поскольку мы заранее не знаем, сколько записей содержит файл, мы всегда должны обрабатывать условие конца файла (EOF), используя предложение AT END:
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является распространенной синтаксической ошибкой, которая препятствует компиляции.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.Перед выполнением оператора WRITE подчиненные поля структуры записи FD (в данном случае SALES-RECORD) должны быть заполнены в памяти.
4. Закрытие файлов: оператор CLOSE
По завершении обработки каждый открытый файл необходимо закрыть, чтобы освободить системные ресурсы и обеспечить запись всех данных на диск:
CLOSE SALES-FILE.Обратите внимание, что оператор CLOSE принимает в качестве аргумента логическое имя файла, а не имя записи.
Попробуйте это
Завершите РАЗДЕЛЕНИЕ ПРОЦЕДУРЫ, открыв ФАЙЛ ПРОДАЖ в режиме ВВОД, прочитав первую запись и установив для управляющей переменной WS-EOF значение «Y», когда будет достигнут конец файла. Наконец, не забудьте закрыть файл перед остановкой.
Показать подсказку
Напишите по порядку: ОТКРЫТЬ ВХОДНОЙ ФАЙЛ ПРОДАЖ. затем ПРОЧИТАЙТЕ ФАЙЛ ПРОДАЖ В КОНЦЕ, ПЕРЕМЕЩИТЕ 'Y' В WS-EOF END-READ. затем ЗАКРЫТЬ ФАЙЛ ПРОДАЖ. и, наконец, СТОП БЕГ.
Решение доступно после 3 попыток
Завершите РАЗДЕЛЕНИЕ ПРОЦЕДУР, открыв ФАЙЛ ПРОДАЖ в режиме ВЫВОД. Переместите значение 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 попыток