Студопедия

КАТЕГОРИИ:


Архитектура-(3434)Астрономия-(809)Биология-(7483)Биотехнологии-(1457)Военное дело-(14632)Высокие технологии-(1363)География-(913)Геология-(1438)Государство-(451)Демография-(1065)Дом-(47672)Журналистика и СМИ-(912)Изобретательство-(14524)Иностранные языки-(4268)Информатика-(17799)Искусство-(1338)История-(13644)Компьютеры-(11121)Косметика-(55)Кулинария-(373)Культура-(8427)Лингвистика-(374)Литература-(1642)Маркетинг-(23702)Математика-(16968)Машиностроение-(1700)Медицина-(12668)Менеджмент-(24684)Механика-(15423)Науковедение-(506)Образование-(11852)Охрана труда-(3308)Педагогика-(5571)Полиграфия-(1312)Политика-(7869)Право-(5454)Приборостроение-(1369)Программирование-(2801)Производство-(97182)Промышленность-(8706)Психология-(18388)Религия-(3217)Связь-(10668)Сельское хозяйство-(299)Социология-(6455)Спорт-(42831)Строительство-(4793)Торговля-(5050)Транспорт-(2929)Туризм-(1568)Физика-(3942)Философия-(17015)Финансы-(26596)Химия-(22929)Экология-(12095)Экономика-(9961)Электроника-(8441)Электротехника-(4623)Энергетика-(12629)Юриспруденция-(1492)Ядерная техника-(1748)

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




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

У програмі мовою 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.

Переміщення по файлу

Дана група операцій додає кілька корисних можливостей, дозволяючи довільно змінювати послідовний порядок операцій читання і запису. Ця група містить дві операцій (процедури)

Seek

Truncate

і три додаткові функції

FileSize

FilePos

Eof

Перераховані примітиви безпосередньо працюють з поточним покажчиком файлу. Процедура Seek дозволяє явно змінити значення поточного покажчика, установивши його на елемент файлу з заданим номером. Процедура має два параметри: змінну файлового типу і ціле (типу longint). Другий параметр розуміється як порядковий номер елемента файлу, на який необхідно установити покажчик.

Після виконання процедури Seek подальші операції читання чи запису будуть проводитися, починаючи з установленої позиції покажчика.

Функції FileSize і FilePos дозволяють одержати додаткову інформацію про файл, що вказується в якості їхнього єдиного параметра. Функція FileSize повертає загальне число елементів файлу, а функція FilePos - номер елемента, на який установлений поточний покажчик.

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

Seek(F,FiiePos(F)+l){ пропуск одного елемента }

Seek(F,0){ установка покажчика на початок файлу }

Seek (F, FileSize (F)) { установка поточного покажчика безпосередньо за останнім елементом файлу; це може служити вихідною позицією для додавання елементів у "хвіст" файлу }

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

Нарешті, процедура Truncate використовується для відсікання від файлу його хвостової частини, що починається від поточної позиції покажчика включно. Єдиний параметр процедури Truncate - файлова змінна, відповідна файлу, що усікається.

Спеціальні операції

Дана група операцій призначена для дій з елементами файлової системи MS-DOS - каталогами й іменами файлів, дозволяючи створювати і видаляти каталоги, видаляти і перейменовувати файли, працювати з атрибутами файлів і т.д. Докладне пояснення цих операцій можна знайти у фірмових посібниках з мови, а тут обмежимося вказівкою імен деяких процедур:

Erase - видалення файлу на диску.

Rename -перейменування файлу.

ChDir - установити поточний каталог.

MkDir - створити новий (під)каталог.

RmDir - видалити порожній (під)каталог.

Текстові файли

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

Текст у файлі зберігається у виді послідовності символів (char), для розбивки тексту на рядки використовуються невидимі при перегляду символи кінця рядка.

1. Оголошення файлової змінної і прив'язка до файлу на диску

Для того щоб програма могла працювати з текстовим файлом, нам буде потрібно змінна спеціального файлового типу text:

var f: text;

Ця змінна не містить у собі весь текст із файлу, вона служить для читання даних з файлу і для запису нових даних у нього.

Перш ніж працювати з конкретним файлом на диску, файлову змінну варто зв'язати з цим файлом, використовуючи таку процедуру:

assign(TxtFile: text, name: string);

Перший параметр (TxtFile) — файлова змінна, другий — рядок, що містить ім'я файлу на диску. Якщо файл лежить у поточному каталозі, то досить указати тільки його ім'я і розширення, якщо в якому-небудь іншому, то потрібно вказувати шлях до цього файлу, наприклад:

assign(f,'Z:\SCHOOL\text1.txt');




Поделиться с друзьями:


Дата добавления: 2014-12-16; Просмотров: 537; Нарушение авторских прав?; Мы поможем в написании вашей работы!


Нам важно ваше мнение! Был ли полезен опубликованный материал? Да | Нет



studopedia.su - Студопедия (2013 - 2024) год. Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав! Последнее добавление




Генерация страницы за: 0.012 сек.