Студопедия
Новини освіти і науки:
МАРК РЕГНЕРУС ДОСЛІДЖЕННЯ: Наскільки відрізняються діти, які виросли в одностатевих союзах


РЕЗОЛЮЦІЯ: Громадського обговорення навчальної програми статевого виховання


ЧОМУ ФОНД ОЛЕНИ ПІНЧУК І МОЗ УКРАЇНИ ПРОПАГУЮТЬ "СЕКСУАЛЬНІ УРОКИ"


ЕКЗИСТЕНЦІЙНО-ПСИХОЛОГІЧНІ ОСНОВИ ПОРУШЕННЯ СТАТЕВОЇ ІДЕНТИЧНОСТІ ПІДЛІТКІВ


Батьківський, громадянський рух в Україні закликає МОН зупинити тотальну сексуалізацію дітей і підлітків


Відкрите звернення Міністру освіти й науки України - Гриневич Лілії Михайлівні


Представництво українського жіноцтва в ООН: низький рівень культури спілкування в соціальних мережах


Гендерна антидискримінаційна експертиза може зробити нас моральними рабами


ЛІВИЙ МАРКСИЗМ У НОВИХ ПІДРУЧНИКАХ ДЛЯ ШКОЛЯРІВ


ВІДКРИТА ЗАЯВА на підтримку позиції Ганни Турчинової та права кожної людини на свободу думки, світогляду та вираження поглядів



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

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

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

2. Читання даних з файлу

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

Щоб відкрити для читання файл, що був зазначений при виклику assign, потрібно використовувати процедуру

reset(TxtFile: text);

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

Після відкриття файлу можна починати читання даних. Для цього використовуються процедури read і readln, що використовуються в наступному форматі:

read(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

readln(TxtFile: text, v1: type1, v2: type2, ... vN: typeN);

Перша процедура читає послідовно з файлу значення і поміщає їх у змінні v1, v2, ... v. Після кожного прочитаного значення покажчик файлу зміщується до початку наступного значення. Процедура readln робить те ж саме, після чого переміщує покажчик на початок наступної рядка; readln з одним лише першим параметром переводить покажчик на початок нового рядка. Як параметри для процедур read і readln можна використовувати змінні наступних типів:

* цілі: integer, byte, shortint, word, longint;

* дійсні: real, single, double, extended, comp;

* рядкові (string);

* символьні (char).

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

При читанні чисел read і readln працюють так: спочатку покажчик пропускає всі пробіли і символи табуляції, а потім, знайшовши перший значущий символ, намагається прочитати число. Якщо це неможливо (зустрілася буква чи число записане невірно), то відбудеться помилка.

Приклад використання процедури читання:

var f: text; s: string; n: integer;

...

readln(f,n,s);

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

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

eoln(TxtFile: text): boolean;

eof(TxtFile: text): boolean;

Перша приймає значення true (істина), якщо покажчик стоїть на кінці рядка, друга — те ж саме для кінця файлу.

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

close(TxtFile: text);

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

 

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

program ShowFile;

var f: text;

c: char;


Читайте також:

  1. Аналіз опрацювання помилок
  2. Аналітична обробка інформації вузлами інформаційно-аналітичної функціональної підсистеми МОЗ України і питань НС.
  3. Бухгалтерська обробка документів.
  4. Введення інформації в ЕОМ та її обробка
  5. Визначення помилок і шахрайства
  6. Виправлення помилок в облікових реєстрах
  7. Виправлення помилок в податковій декларації з податку на прибуток
  8. Виправлення помилок і зміни в облікових оцінках.
  9. Виправлення помилок та зміни у фінансових звітах.
  10. Виправлення помилок та інші зміни у фінансовій звітності
  11. Виправлення помилок у звітності страхувальників по коштах загальнообов’язкового державного соціального страхування.
  12. Виправлення помилок у податковому обліку




Переглядів: 1218

<== попередня сторінка | наступна сторінка ==>
Побудова елементарних зображень | Покажчики

Не знайшли потрібну інформацію? Скористайтесь пошуком google:

  

© studopedia.com.ua При використанні або копіюванні матеріалів пряме посилання на сайт обов'язкове.


Генерація сторінки за: 0.018 сек.