Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции_Паскал.doc
Скачиваний:
2
Добавлен:
21.09.2019
Размер:
1.21 Mб
Скачать

Операції введення-виведення

У цю групу входять дві операції (процедури), що власне, і реалізують дії по читанню інформації з файлу і запису інформації в файл:

Read

Write

На відміну від багатьох інших процедур, Read і Write можуть викликатися з РІЗНИМ ЧИСЛОМ ПАРАМЕТЮВ, і ці параметри можуть мати РІЗНІ ТИПИ.

Процедура Read призначена для читання значень з файлу в програму. Першим параметром повинно бути ім'я файлової змінної, до якої була застосована одна з операцій відкриття (Reset чи Rewrite). Далі повинні визначатись змінні, у які будуть розташовуватись значення, що читаються з файлу. Тип цих змінних повинний збігатися з базовим типом файлу з першого параметра.

Виконання процедури Read відбувається так. Починаючи з поточної позиції покажчика файлу буду послідовно читатися значення, що містяться у файлі. Кожне прочитане значення буде присвоюватись черговий змінний з тих, котрі зазначені у виклику процедури. Після кожного акта читання покажчик файлу буде зміщатися на наступну позицію.

Якщо в процесі виконання процедури Read поточний покажчик файлу буде встановлений на позицію, що не містить інформації (тобто буде досягнутий кінець файлу), то читання буде припинено, процедура Read завершиться передчасно, і виникне ситуація “кінець файлу". Виникнення цієї ситуації можна перевірити за допомогою вбудованої функції eof.

Процедура Write має зворотний сенс, дозволяючи записувати у файл інформацію з програми. Першим параметром цієї процедури повинно бути ім’я файловою змінною, відкритої процедурою Reset чи Rewrite. Далі повинний йти список виразів, тип яких збігається з базовим типом файлу з першого параметра.

Виконання процедури Write досить очевидно. Значення чергового виразу буде поміщено у файл в місце, відзначене поточним покажчиком. Після цього поточний покажчик буде пересунений на одну позицію і дії повторяться для наступного виразу зі списку параметрів виклику процедури Write.

Обробка помилок введення-виведення

Виконання операцій, що здійснюють дії з файлами на зовнішніх пристроях, з досить високою імовірністю може викликати виникнення тих чи інших помилкових ситуацій. Тому при програмуванні фрагментів, зв'язаних з такими діями, необхідно виявляти підвищену акуратність і намагатися передбачати обставини, при яких та чи інша операція може привести до помилки.

У програмі мовою Turbo Pascal установлені наступні правила обробки помилкових ситуацій, зв'язаних із введенням-виведенням. За замовчуванням при виконанні будь-якої такої операції автоматично виробляється перевірка на виникнення помилки. При виявленні помилки виконання програми припиняється, а на екран дисплея виводиться коротке діагностичне повідомлення, що містить умовний номер помилки.

Поряд з такою стандартною формою реакції на помилки, у системі мається можливість передбачити власну реакцію на помилкові ситуації в самій програмі. Для цього необхідно на початку "небезпечного" фрагмента програми відключити автоматичну перевірку на виникнення помилки. Це робиться внесенням директиви компілятора {$-}. У цьому випадку виникнення помилки при виконанні програми не буде приводити до негайного її завершення; замість цьго код (умовний номер) виниклої помилки буде запам’ятований системою. За допомогою стандартної функції IoResult без параметрів можна одержати цей код і побудувати подальші дії в залежності від його значення, наприклад:

Assign (F,'з:\myfile');

{$I-} { відключаємо автоматичний контроль }

Reset (P) ;

{$I+} { включаємо автоматичний контроль }

if IOResult <> 0 then { виникла помилка}

Write('Помилка при відкритті файлу');

У випадку використання функції IoResult потрібно твердо пам'ятати наступну особливість: якщо відключений режим автоматичного контролю (спрацювала директива {$I-}), то після виникнення помилки всі наступні операції. З БУДЬ-ЯКИМ ФАЙЛОМ будуть ігноруватися, поки не відбудеться звертання до функції IoResult. Тому гарним правилом є виклик функції й аналіз коду помилки ВІДРАЗУ ПІСЛЯ виконання операції, зв'язаної з файлом. Крім того, варто пам'ятати, що виклик функції IoResult, повертаючи в програму код помилки, обнулює цей код, тому наступні звертання до цієї функції будуть завжди давати нульовий результат, поки яка-небудь файлова операція не закінчиться аварійно.

Вважається, що при успішному виконанні операції звертання до IoResult дає в результаті 0; ненульовий результат свідчить про виникнення помилки. При необхідності можна провести більш детальний аналіз коду помилки, наприклад:

Assign(F,'з:\myfile');

{$І-} { відключаємо автоматичний контроль }

Reset(F) ;

Code := IoResult; { одержали код результату }

if Code <> 0 then begin { виникла помилка! }

Write('Помилка при відкритті файлу: ');

case Code of

1 : Write('Файл не знайдений') ;

3 : Write('Маршрут не знайдений') ;

4 : Write('Занадто багато відкритих файлів') ;

5 : Write('Заборона доступу до файлу');

6 : Write('Некоректний хід доступу до файлів') else

end

end;

{$!+) { включаємо автоматичний контроль }

Повний список можливих помилкових ситуацій і відповідних кодів приводиться у фірмовій документації по системі Turbo Pascal.