
- •Завдання (інструкційна картка) для лабораторної роботи
- •Інструкційна картка лабораторного заняття № 1
- •Методичне забезпечення
- •Матеріально-технічне забезпечення
- •Питання для актуалізації опорних знань
- •Правила техніки безпеки
- •Загальні відомості з теми
- •Стандартні підпрограми для обробки файлів
- •Контроль операцій введення-виведення
- •Текстові файли
- •Файли без типу
- •Зміст роботи
- •Індивідуальні завдання
- •Приклади програм
- •Блок - схема програми:
- •Лістинг програми:
- •Результат роботи програми:
- •Лістинг програми:
- •Результат роботи програми:
- •Контрольні питання
Контроль операцій введення-виведення
Спосіб контролю правильності операцій введення-виведення залежить від стану директиви контролю цих операцій. Директива має вигляд: {$І+} або {$І-}. За замовчуванням директива перебуває в активному стані {$І+}. У цьому режимі, якщо виникне помилка введення-виведення, робота програми переривається і користувач отримує повідомлення про номер та місцезнаходження помилки. Такий спосіб контролю незручний, бо може призвести до втрати даних.
Якщо директива {$І} перебуває в пасивному стані {$І-}, то за умови виникнення помилки введення-виведення виконання програми не припиняється, але наступні операції введення-виведення затримуються. Стан затримування зберігається доти, доки не буде викликана цілочислова функція IOResult. Ця функція повертає значення 0, якщо попередні операції введення-виведення були коректними, і деяке ненульове значення, якщо виявлені помилки. Після звертання до цієї функції значення її обнуляється. Хоча ця функція лише фіксує наявність чи відсутність помилок, контролюючи кожну операцію введення-виведення шляхом переведення директиви {$І} в пасивний стан тільки на момент виконання цієї операції, можна ідентифікувати причину виникнення помилки і передбачити програмні засоби для її усунення без переривання роботи програми і зі збереженням даних.
Текстові файли
Окреме місце в мові Паскаль займають текстові файли. На відміну від інших файлів, текстові файли не складаються з послідовності однакових елементів. Компонентами їх є рядки символів, що можуть мати довільну довжину. У кінці кожного рядка записується знак кінця рядка. У кінці файлу записується признак кінця файлу. Текстовий файл описується за допомогою стандартного ідентифікатора Техt. Наприклад,
Var f:Text.
Оскільки текстові файли не мають регулярної структури, то до них не можна застосовувати стандартні підпрограми FilePos, FileSize і Seek. Забороняється також одночасно читати і писати в один і той самий текстовий файл.
Процедури
Стандартні процедури Assign, Close, Reset, Rewrite мають ту саму дію. Процедури Read і Write модифіковані.
Read(Var f:Text;Var a1,…,an:anytype) – зчитує з файлу f значення і присвоює їх змінним із списку. Тип anytype може бути символьним, рядковим, цілим або дійсним. Дія і результат процедури Read залежать від типу величин, що зчитуються. Для параметра-змінної символьного типу з файлу буде зчитано символ і присвоєно відповідній змінній. Якщо до виконання процедури Read функція Eof набула значення Тruе, то символьній змінній буде присвоєно символ Chr($1А) (символ ^Z – кінець файлe), а якщо функція Eoln набула значення Тruе (в той-же час функція Eof набула значення False), то змінній буде присвоєно значення Сhr($0D) і Сhr($0A) (символ Сr – повернення каретки).
Для параметра-змінної рядкового типу процедура Read буде читати всі символи з одного рядка файлу до символу кінця рядка, але не включаючи його. Якщо довжина рядка перевищує довжину рядка-змінної, то зайві праві символи буде відкинуто.
Для параметра-змінної цілого типу чи деякого його піддіапазону процедура Read чекатиме надходження послідовності символів, які утворюють цілочислову константу. Пропуски, символи табуляції чи мітки кінця рядка, які передують числовій послідовності, пропускаються. Зчитування припиняється за умови зустрічі першого пропуску, знака табуляції чи мітки кінця рядка, що йдуть за числовою послідовністю, або за умови зустрічі мітки кінця файлу. Якщо числова послідовність не відповідає очікуваному формату цілого числа, то фіксується помилка введення-виведення.
Для параметра-змінної дійсного типу процедура Read чекатиме надходження послідовності символів, що утворюють константу дійсного типу. Пропуски, символи табуляції чи мітки кінця рядка, що передують числовій послідовності, пропускаються. Зчитування припиняється за умови зустрічі першого пропуску, знака табуляції чи, мітки кінця рядка, що йдуть за числовою послідовністю, або за умови зустрічі мітки кінця файлу. Якщо числова послідовність не відповідає очікуваному формату дійсного числа, то фіксується помилка введення-виведення.
Readln(Var f:Text; Var a1,…,an:anytype) – процедура, аналогічна процедурі Read, проте з тією відмінністю, що наступний оператор зчитування виконуватиметься з початку нового рядка, а символи, залишені в попередньому рядку, ігноруються. Виклик процедури Readln без списку параметрів-змінних приводить просто до переміщення вказівника файлу на початок наступного рядка. Таким чином оператор Readln(f,a,b) аналогічний складеному оператору;
begin Read(f,a);Read(f,b);Readln(f) end;.
Write(Var f:Text; Var a1,…,an:anytype) – записує у файл, який визначає f, одне або більше значень із списку змінних. Тип anytype може бути символьним, рядковим, цілим, логічним або дійсним. У процедурі Write допускається форматоване виведення аналогічно форматованому виведенню на екран. В даному випадку вільні знакомісця записуються у файл як пропуски.
Writeln(Var f:Text; Var a1,…,an:anytype) – процедура, аналогічна процедурі Write, але на відміну від неї після закінчення запису значень змінних із списку у файл записується мітка кінця рядка і наступний оператор виведення здійснюватиме запис даних з нового рядка. Виклик процедури Writeln без списку параметрів-змінних приводить до запису в файл порожнього рядка.
Слід зазначити, що стандартні системні файли (con, com1, lpt1 і т. д.) системою Turbo Pascal інтерпретуються як текстові і до них можна застосовувати процедури Readln і Writeln з тим самим змістом.
Наприклад, процедури Readln(Con) або Readln чекають натискування клавіші введення, процедура Writeln(Lst) виводить на друкуючий пристрій порожній рядок.
Функції
Eof(f:text):Boolean – аналогічна Eof для типізованих файлів.
Eoln(f:text):Boolean – функція набуває значення Тruе, якщо вказівник файлу міститься на мітці кінця рядка або на мітці кінця файлу, і False – в іншому випадку.
SeekEof(f:text):Boolean – функція, аналогічна функції Eof, але на відміну від неї ігнорує всі пропуски, символи табуляції і кінця рядка.
SeekEoln(f:text):Boolean – функція, аналогічна функції Eoln, але на відміну від неї ігнорує всі пропуски і символи табуляції.