Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лабораторна робота3.doc
Скачиваний:
27
Добавлен:
18.11.2019
Размер:
67.07 Кб
Скачать

Лабораторна робота №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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]