Модульні уроки (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 приймає як аргумент ім’я логічного файлу, а не ім’я запису.
Спробуйте це
Завершіть PROCEDURE DIVISION, відкривши SALES-FILE у режимі INPUT, прочитавши перший запис і встановивши для змінної керування WS-EOF значення "Y", коли досягнуто кінця файлу. Нарешті, не забудьте закрити файл перед зупинкою.
Показати підказку
Пишіть по порядку: OPEN INPUT SALES-FILE. потім READ SALES-FILE AT END MOVE 'Y' TO WS-EOF END-READ. потім ЗАКРИТИ ФАЙЛ ПРОДАЖІВ. і нарешті STOP RUN.
Рішення доступне після 3 спроб
Завершіть PROCEDURE DIVISION, відкривши SALES-FILE у режимі OUTPUT. Перемістіть значення 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 спроб