будь-якого типу, крім text.
Файл при цьому повинен бути відкритим.
Приклад застосування функції FilePos – див. в додатку 2.
Функція EoF повертає значення TRUE, якщо покажчик поточної позиції знаходиться за останнім елементом файла, або якщо файл порожній. В протилежному випадку функція повертає значення FALSE:
EoF ( f );
де f – файлова змінна будь-якого типу.
Приклад застосування функції EoF – див. в додатку 1. Ця функція використовується досить часто [1].
Функція EoLn цілком аналогічна функції EoF, крім того що вона застосовується тільки для текстових файлів і перевіряє ознаку кінця рядку. Зазвичай використовується наступна конструкція частини програми, яка служить для читання з текстового файлу:
While not EoLn(f) do
begin
read(f,x);
write(x)
end;
readln(f); writeln;
…
Оператор While ... do означає, що, доки не зустрінеться ознака кінця рядку, всі символи з файлу f один за одним повинні виводитися на друк (read(f,x); write(x)). Як тільки зустрінеться вказана ознака, виконуються процедури readln(f) і writeln.
Процедура readln(f) вказує, що всі символи до першого символу нового рядку повинні бути пропущені. Процедура writeln означає, що наступні дані повинні друкуватися з нового рядку [6].
3.4 Спеціальні операції
До цієї групи відносять процедури та функції, які мають різне призначення, але, головним чином, пов’язані з організацією структури диску. Наприклад, для роботи з каталогами в модулі System є такі процедури, як ChDir (змінює поточний каталог), MkDir (створює новий підкаталог), RmDir (видаляє порожній каталог), GetDir (дає інформацію, який каталог є поточним). Ці процедури аналогічні командам MS-DOS.
Докладніше подивимося процедуру Rename.
Процедура Rename перейменовує файл, який повинен бути закритим:
Rename ( f , 'нове ім’я');
де f – файлова змінна будь-якого типу;
'нове ім’я' – параметр типу string [1].
3.5 Завершальні операції
До цієї категорії відносяться три процедури, якими, зазвичай, закінчується робота з файлами -- Close, Erase та Flush.
Процедура Flush застосовується тільки до текстових файлів і до того ж досить нечасто, тому що процедура Close при закритті файлу автоматично робить то саме.
Процедура Close закриває файл, відкритий процедурою Reset, Rewrite або Append:
Close ( f );
де f – файлова змінна будь-якого типу.
В принципі, процедуру Close для закриття файлів застосовувати не обов'язково – всі відкриті файли при нормальному завершенні програми закриваються автоматично. Однак, використання процедури Close є ознакою доброго смаку.
Приклад застосування процедури Close – див. в додатках 1, 2.
Процедура Erase видаляє файл з диску:
Erase ( f );
де f – файлова змінна будь-якого типу.
В кінці роботи тимчасово створені файли часто доводиться видаляти. [1]
Приклад застосування процедури Erase – див. в додатках 1.
4. Типи файлів
Існує три способи визначення файлового типу (або файлової змінної):
f= file of a; {а – тип елементів, що містяться в файлі}
f=text;
f=file;
Ці три способи відповідають трьом видам файлів, якими дозволяє оперувати Turbo Pascal, а саме: типізованим, текстовим і нетипізованим файлам. [1]
4.1 Типізовані файли
Всі елементи типізованого файлу мають бути одного типу. Типізовані файли можуть бути будь якого типу, крім файлового (неприпустиме існування "файлу файлів").
Типізовані файли дозволяють як послідовний, так і прямий доступ. Працюючи з прямим доступом, слід пам’ятати, що елементи типізованих файлів завжди нумеруються, починаючи від нуля.
Зчитування даних із типізованих файлів виконується тільки процедурою Read, а записування -- тільки процедурою Write. При цьому одиницею зчитування/запису може бути тільки змінна того самого типу, що й тип файлу. [2]
Процедура Read для типізованих файлів має наступний формат:
Read (назва файлової змінної, список змінних);
Під час читання даних з файлу треба перевіряти, чи не вичерпалися дані у файлі. Для цього використовують стандартну функцію EoF (назва файлової змінної). Вона набуває значення TRUE, якщо файл вичерпано, і значення FALSE у протилежному випадку. [3]
Процедура Write для типізованих файлів має такий формат:
Write (назва файлової змінної, список змінних);
Виконуючи записування у файл, слід пам’ятати, що при запису кожної змінної покажчик поточної позиції в файлі, так само і як при читанні, переміщується на наступний елемент. Якщо покажчик поточної позиції файла знаходиться за останнім елементом, тобто в кінці файлу (значення функції EoF(f)= TRUE), то при виконанні процедури Write файл розширюється.
Для роботи з прямим доступом призначені наступні процедури і функції:
Функція FilePos -- повертає номер поточної позиції покажчика в файлі (позиції нумеруються від нуля!).
Функція FileSize -- повертає поточний розмір файлу (кількість елементів у файлі, рахуючи від одиниці!).
Процедура Seek -- зміщує покажчик поточної позиції в файлі на елемент, який має заданий номер (рахуючи від нуля!).
Процедура Truncate -- усікає розмір файлу до поточної позиції. Всі елементи, які розташовані після поточної позиції у файлі, видаляються, і поточна позиція у файлі стає його кінцем ( EoF(f)= TRUE ). [2]
Більш докладно про ці функції та процедури розповідається в розділі 3.3.
4.2 Текстові файли
Особливим видом файлів є текстові файли, які є в Turbo Pascal різновидом файлів типу File of Char.
Для опису текстових файлів використовується стандартний тип Техt:
Var
TextFile : Text;
В текстових файлах, крім ознаки кінця файлу Eof (End of File), використовується ще ознака кінця рядку Eoln (End of Line). Ознака Eoln є послідовністю з двох символів коду ASCII – символу з кодом 13 ("возврат каретки") і символу з кодом 10 ("перевід рядку").
Текстовий файл можна уявити собі як сторінку книги, в кінці кожного рядку якої стоїть Eoln.
Для введення - виведення даних текстового файлу призначені стандартні процедури Read, Readln, Write, Writeln (відмінність у тому, що першим параметром цих процедур має бути вказана файлова змінна):
Read (назва файлової змінної, список змінних);
Readln (назва файлової змінної, список змінних);
Write (назва файлової змінної,