Тема 4 Складні структури даних. Динамічні структури даних

Лекція 16

Вікно файлу. Процедури роботи з файлами.  Читання з файлу і запис у  файл.  Буферні  змінні файлу. Текстові файли

Команди (процедури і функції) для роботи з файлами

-  assignfile (<ім'я файлової змінної>,<зовнішнє ім'я>) - процедура, яка налагоджує зв'язок між іменем файлу у програмі і файлом на зовнішньому носії;

-   reset (< ім'я файлової змінної >) - процедура, яка відкриває файл для читання з нього даних;

-   read (< ім'я файлової змінної>, < ім'я змінної >) – читає (вводить) дане з файлу в оперативну пам'ять;

-    closefile (< ім'я файлової змінної >) – закриває файл (він стає недоступним ні для запису, ні для читання);

-   rewrite (< ім'я файлової змінної>) – відкриває файл для читання і записування в нього даних (створює новий файл);

- write (< ім'я файлової змінної>,<ім'я змінної>) – записує (вводить) дане у файл;

-  eof (< ім'я файлової змінної >) – логічна функція, яка визначає кінець файлу. Вона повертає значення true, якщо вказівник знаходиться на ознаці кінця файлу і повертає значення false в протилежному випадку;

-  seek (<ім'я файлової змінної>, k) – процедура, яка встановлює вказівник на заданий (k-й) компонент файлу;

-  filepos (< ім'я файлової змінної >) — функція, що повертає поточне положення вказівника файлу;

-  filesize (< ім'я файлової змінної >) — функція, що повертає кількість компонентів файлу;

-  truncate – процедура, яка обрізає файл, починаючи з компонента, на якому стоїть вказівник.

Зауваження:

-    <ім'я файлової змінної> – це ім'я файлу, задане у розділі оголошення змінних;

-   <зовнішнє ім'я> — це ім'я файлу даних на зовнішньому носії, взяте у лапки, наприклад, ‘d:\grupa1\lab1.pas’. Тобто, у одному файлові даних відповідають 2 назви: у програмі коротка назва файлу і назва відповідного файлу даних на диску.

Типи файлів за способом організації:

-         текстові;

-         типізовані;

-         нетипізовані.

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

Стандартний тип файлу у мові Delphi називається текстовим (файл послідовного доступу). Файли цього типу оголошуються так:

var <список назв файлів>: textfile;

Елементи текстового файлу – рядки, тобто послідовності символів. Такий файл можна створювати та редагувати з допомогою текстового редактора. Розмежувач між елементами файлу – пропуск.

Текстові файли допускають тільки послідовний доступ. Проте над текстовими файлами виконуються ті ж операції, як і над файлами прямого доступу. Проте поряд з командою read для введення даних з текстового файлу в оперативну пам'ять використовують команду readln (вона означає перехід до нового рядка з даними). Для виведення даних із оперативної пам'яті у файл поряд з командою write використовують команду writeln.

На відміну від звичайних файлів у текстовий файл можна додавати (дописувати) дані. Для цього замість процедури rewrite використовують процедуру   append <ім'я файлової змінної>.

Наприклад, створити текстовий файл з даними (ім'я – десять символів; рік народження; група) про чотирьох друзів і записати його на диск під назвою ‘Grupa.pas’.

Для цього потрібно:

1. відкрити вікно середовищa Турбо паскаль (або будь-якого текстового редактора, наприклад, Блокнота);

2. набрати, наприклад, такі чотири рядки (ретельно вирівнюючи пропусками стовпці даних):

Максим    2000 2А

Сергій      2002 2Г

 Юля         2001 3А

 Наталка   2001 3В

3. виконати команду Save as і надати файлу назву Grupa.pas;

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

Окрім текстових файлів є можливість створити так звані типізовані файли.  Для цього потрібно конкретний тип елементів описали у розділі type за допомогою службових слів file of, а файлову змінну оголосити у розділі var:

type <ім'я типу>= file of<базовий тип>;

var <ім'я файлової змінної >:< ім'я типу файлу >;

Файл із зазначеним типом даних називається типізованим.

Базовим типом можуть бути будь-які типи, окрім файлового, наприклад, integer, real, record.

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

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

Типізовані файли опрацьовують так, як і текстові, але з такою відмінністю: для записування даних у файл використовують лише команду write, не турбуючись про пропуски між даними, а для зчитування даних з файлу – команду read.

Типізовані файли мають недоліки порівняно з текстовими файлами: типізований файл неможна створити або переглянути з допомогою текстового редактора, до нього не можна дописувати дані в режимі  append.

Для швидкого виконання операції вводу-виводу із зовнішніх файлів використовуються нетипізовані файли.

Відмінність таких файлів від типізованих полягає в тому, що під час їх оголошення не визначається тип компонентів. Це дозволяє отримати доступ до файлів з будь-якою структурою і забезпечує можливість прямого доступу до даних:  var f:  file;

Приклади файлів різних типів:

type

         arr = array of  integer;

         date = record

                   day: 1..31;

                   month: 1..12;

                   year: 1900..2010;

         end;

var     f 1:  file of  integer;    {типізований файл }

                   f 2:  file of  arr;     {типізований файл}

f 3:  file of  date;   {типізований файл}

f 4:  file;    {не типізований файл}

f 5:  text;   {текстовий файл}        

 

 Контрольні запитання:

1. Процедури роботи з файлами.

2. Читання і запис у файл.

3. Охарактеризуйте текстовий файл.