- •Складання програм для обробки даних типу Record та збереження їх у файлах
- •Теоретичні відомості файли в мові pascal
- •Var ім’я файлової змінної:text;
- •Var ім’я файлової змінної:file of тип компонентів;
- •Var ім’я файлової змінної:file;
- •Var t1:text; {текстовий файл}
- •Порядок виконання роботи:
- •Звіт повинен містити:
- •Завдання до лабораторної роботи №3 Завдання
Лабораторна робота №3
Складання програм для обробки даних типу Record та збереження їх у файлах
Мета: Засвоєння навичок опису та використання структур даних типу ,,запис"(гесогd). Набуття навичок при роботі з файлами в мові PASCAL, їх представленні в програмі та порядку роботи з ними. Навчитись використовувати стандартні процедури та функції обробки файлів.
Обладнання: ПК, програмне забезпечення Turbo Pascal, методичні вказівки та завдання до лабораторної роботи.
Теоретичні відомості файли в мові pascal
Робота з файлом у мові складається з таких етапів:
оголошення файлової змінної;
зв’язування файлової змінної з іменем наявного файлу або файлу, що створюється;
відкриття файлу;
обробка файлу;
закриття файлу.
Розглянемо перераховані етапи детально.
Типи файлів і оголошення файлових змінних
Синтаксис оголошення файлової змінної залежить від типу файлу. Приклади оголошення змінної текстового, типізованого і не типізованого файлу:
Var ім’я файлової змінної:text;
Var ім’я файлової змінної:file of тип компонентів;
Var ім’я файлової змінної:file;
Приклади оголошення файлових змінних:
Program ex1;
Type data=record
Name:string;
Address:string;
Birthday:integer;
End;
Var t1:text; {текстовий файл}
Bin1:file of data; {файл записів}
Bin2:fila of integer; {файл цілих чисел}
Nt:file; {не типізований файл}
Begin
End.
Встановлення відповідності між фізичним і логічним файлом
Файл будь-якого типу може бути опрацьований у програмі лише після того, як певна файлова змінна буде зв’язана з певним фізичним файлом. Це зв’язування виконується за допомогою процедури, що має такий синтаксис:
Assign(файлова змінна, рядковий вираз);
Значенням рядкового виразу має бути ім’я фізичного файлу. Формат цього імені визначається операційної системою. Якщо файл знаходиться не в робочому каталозі програми, то до нього потрібно вказати повний шлях. Виклик даної процедури повинен передувати викликам всіх інших процедур обробки файлів.
Приклад зв’язування файлових змінних із фізичними файлами.
Program ex2;
Type data=record
Name:string;
Address:string;
Birthday:integer;
End;
Var t1:text; {текстовий файл}
Bin1:file of data; {файл записів}
Bin2:fila of integer; {файл цілих чисел}
Nt:file; {не типізований файл}
Begin
Assign(t1,’document.txt’);
Assign(bin1,’anketa.doc’);
Assign(bin2,’d:\bp\numbers.dat’);
Assign(nt,’byte.bit’);
End.
Відкриття та закриття файлів
Відкриття файла для читання або для читання і запису виконується процедурою Reset, для якої є два варіанти синтаксису:
Reset:(<файлова змінна>);
Процедура використовується для текстових і типізованих файлів. Текстові файли процедура Reset відкриває лише для читання, а бінарні файли — для читання і запису.
В результаті спроби відкрити файл, якого немає на диску, виникне помилка Error #2: File not found (Файл не знайдено).
Відкриття файла для запису або читання і запису здійснюється процедурою Rewrite, для якої існує два варіанти синтаксису:
Rewrite(<файловa змінна>):
Процедура Rewrite використовується для текстових і типізованих файлів, Текстові файли процедура Rewrite відкриває лише для запису, а бінарні — для читання і запису.
Якщо аргумент процедури Rewrite зв'язаний з іменем неіснуючого файла, то файл з таким іменем буде створений. Якщо цю процедуру використати для відкриття вже наявного файла, то вміст файла буде видалено та створено новий порожній файл. Процедура Rewrite встановлює файловий покажчик на, початок файла.
Для дописування рядків до вже наявного текстового файла його потрібно відкрити за допомогою процедури Append:
Арреnd(<файлова змінна>);
Після виклику цієї процедури файл стає доступним тільки для запису, а файловий покажчик встановлюється в кінець файла. Отже, всі рядки зберігаються, а нові символи дописуватимуться після наявного тексту.
Файли закриваються процедурою Close:
Сlose(<файлова змінна>);
Процедура Сlose забезпечує збереження всіх компонентів логічного файла у фізичному файлі. Якщо в логічний файл були записані певні дані, але його не було закрито, запис у відповідний фізичний файл міг здійснитися не повністю. Після закриття файла зв'язок файлової змінної із фізичним файлом не порушується, і файл повторно може відкриватися без додаткового виклику процедури Assign.
Зчитування і запис текстових файлів
Зчитування даних із текстового файла здійснюється процедурами Read та Readln за таким синтаксисом:
Read(<файлова змінна>;<список введення>);
Readln(<файлова змінна>;<список введення>);
Тут <список введення> є переліком змінних символьного, рядкового, цілочислового або дійсного типу.
Після зчитування певного компонента файловий покажчик зсувається до наступного компонента. Якщо виконується зчитування з файла до змінної типу char, то процедура Read зчитує один символ. Коли досягнуто кінця рядка, результатом зчитування є символ кінця рядка, #13, а коли досягнуто кінця файла, зчитується символ кінця файла, #26.
Запис до текстового файла здійснюється за допомогою процедур Write та Writeln, що мають такий синтаксис:
Write(<файлова змінна>;<список виведення>);
Writeln(<файлова змінна>;<список виведення>):
Тут <файлова змінна> — змінна типу text; <список виведення> — перелік змінних або виразів символьного, рядкового, цілочислового, дійсного чи логічного типу.
Зауважимо, що процедура запису до текстового файла відрізняється від процедури виведення на екран лише тим, що першим її параметром є файлова змінна. Різниця між процедурами Write та Writeln полягає в тому, що рядок, який записується до файла за допомогою процедури Writeln, завершується символом кінця рядка. Якщо процедура Writeln використовується без списку виведення, то до файла записується порожній рядок.
Під час зчитування з текстового файла кількість його рядків зазвичай є невідомою. Тому для зчитування з файла всіх даних потрібно використовувати функцію Eof, яка визначає, чи досягнуто кінця файла. Наведемо синтаксис цієї функції.
Еоf<файлова змінна>) : boolean;
Дана функція повертає значення булевого типу. Якщо файловий покажчик посилається на кінець файла, буде повернено значення true. Отже, послідовне зчитування всіх компонентів із файла, розмір якого невідомий, може бути реалізоване таким циклом:
While not eof(f) do Readln(f,s);
ЗАПИСИ В МОВІ PASCAL
Опис фіксованого запису:
Record
<поле1>, <поле2>:<тип>;
<полеN!>: <тип> ;
End;
Причому в рамках одного запису всі імена полів мають бути унікальними.
Приклад:{тип -запис}
Type Student=Record
Name:string;
Year:1900. .2000;
End;
{змінна-запис} vаг price:record
Grivni,Kopijki:Word;
end;
S, {один студент}
G52_:.array[1. . 30] of Student; {група (масив) студентів}
F:file of Student; {файл із студентів}
Доступ до полів запису:
здійснюється за допомогою кваліфікованих ідентифікаторів: <ім'я змінної>.<поле> Для спрощення роботи з записами можна використовувати спеціальний оператор приєднання WITH