Порядок роботи з файлами в Паскалі. Типізовані файли

Змінна файлового типу містить інформацію про структуру файлу та його місцезнаходження.
Структура файлу визначається типом файлової змінної (дивись попередній приклад), а для визначення місцеположення файлу необхідно зв’язати змінну з конкретним файлом за допомогою процедури assign. Коли зв’язок файлової змінної із зовнішнім файлом встановлено, то для підготовки файлу до виконання операцій вводу/виводу його необхідно відкрити. 
Файл, що вже існує можна відкрити за допомогою процедури reset, а новий файл можна створити і відкрити за допомогою процедури rewrite
При цьому завжди слід пам’ятати, що текстові файли, відкриті за допомогою процедури reset доступні лише для читання, а відкриті за допомогою процедури rewrite доступні лише для запису. 
Крім того при роботі з текстовими файлами можна використовувати процедуру append. Ця процедура дозволяє відкрити текстовий файл в режимі доповнення (запису інформації в кінець файлу). 
Типізовані і не типізовані файли дозволяють роботу як в режимі читання, так і в режимі запису незалежно від того, якою процедурою вони були відкриті (rewrite чи reset). 
Коли запускається будь-яка програма, то завжди автоматично відкриваються два стандартних файли input та output (ввід та вивід). 
Зазвичай input – це файл зв’язаний з клавіатурою. Він доступний лише для читання
Файл output зазвичай зв’язаний з монітором. Цей файл доступний лише для запису
Доступ до інформації, що міститься в файлі, організується, як правило, послідовно за допомогою стандартних процедур read та write. 
Однак при роботі з типізованими і не типізованими файлами можна організувати прямий доступ до заданого елементу файлу за допомогою процедури seek
Поточну позицію в файлі можна визначити з допомогою стандартної функції filepos, а розмір файлу за допомогою стандартної функції filesize
Після того, як програма завершить роботу з файлом, його необхідно закрити за допомогою процедури close
Після цього файлова змінна може бути зв’язана з іншим файлом. 
Нижче наведено основні процедури та функції для роботи з файлами: 
assign(var f; name:string) – процедура, що зв’язує файлову змінну f з конкретним файлом, шлях до якого задано у рядковій змінній name; 
chdir(s:string) – процедура, що робить поточним каталог, ім’я якого задане у рядковій змінній s; 
close(var f) – процедура, що закриває файл зв’язаний з файловою змінною f; 
erase(var f) – процедура, яка знищує файл зв’язаний з файловою змінною f; 
getdir(d:byte; var s:string) – записує у рядок s назву поточного каталогу на вказаному диску d; 
mkdir(s:string) – процедура, що створює каталог з назвою заданою у рядковій змінній s; 
rename(var f; newname:string) – процедура, що змінює ім’я файла, зв’язаного з файловою змінною f, на ім’я задане у рядковій змінній newname; 
reset(var f) – процедура, яка відкриває існуючий файл, зв’язаний з файловою змінною f; 
rewrite(var f) – процедура, що створює новий файл, зв’язаний з файловою змінною f; 
rmdir(s:string) – дана процедура знищує каталог, ім’я якого задане у рядковій змінній s, якщо він не містить файлів; 
seek(var f; n: longint) – ця процедура переміщує покажчик поточної позиції файлу, зв’язаного з файловою змінною f, у позицію з номером n. Дана процедура не може використовуватись при роботі з текстовими файлами; 
truncate(var f) – процедура, що відрізає файл, зв’язаний з файловою змінною f до поточної позиції. Вся інформація, яка знаходилась у файлі після цієї позиції знищується; 
eof(var f) – функція, що повертає значення “true”, якщо досягнуто кінець файлу, зв’язаного з файловою змінною f або “false” у протилежному випадку; 
filepos(var f) – функція, яка повертає поточну позицію у файлі, зв’язаному з файловою змінною f. Функція не може бути використана при роботі з текстовими файлами; 
filesize(var f) – функція, що повертає поточний розмір файлу, зв’язаного з файловою змінною f. Функція не може бути використана при роботі з текстовими файлами; 
ioresult – функція, яка повертає ціле значення, що характеризує стан останньої операції вводу-виводу. 
Зазвичай при всіх зверненнях до стандартних функцій та процедур вводу/виводу автоматично виконується перевірка на наявність помилок. При наявності помилки програма завершує роботу і виводить на дисплей повідомлення про помилку. За допомогою директив компілятора {$I+} та {$I-} цю автоматичну перевірку можна включити чи виключити. Коли автоматична перевірка виключена (директива {$I-}), помилки вводу-виводу, що виникають при роботі програми, не приводять до її зупинки. При цьому можна виконати перевірку результату операції за допомогою функції ioresult і запрограмувати потрібну реакцію програми на помилку. 
Наприклад: 
uses crt; 
var f : file of string; {файлова змінна типу файл рядків} 
buf,buf1: string; 
begin 
clrscr; 
assign(f,'myfile.dat'); {зв’язуємо файлову змінну f з файлом myfile.dat, який знаходиться в поточному каталозі} 
{$I-} {відключаємо автоматичний контроль помилок вводу-виводу} 
reset(f); {відкриваємо файл myfile.dat} 
{$I+} {поновлюємо режим автоматичного контролю помилок вводу/виводу} 
{аналізуємо стан виконання команди reset} 
 if (ioresult<>0) then {якщо виникла помилка (тобто такого файлу немає) виводимо на екран повідомлення про помилку і створюємо потрібний файл} 
begin 
writeln('File not found, creating new file'); {} 
rewrite(f) ; 
end 
else {в противному випадку виводимо на екран повідомлення про успішне відкриття файлу}
begin 
writeln('File opening successfuly!'); 
end; 
seek(f,filesize(f)); {переводимо покажчик поточної позиції файлу у кінець файлу} 
buf:='Hello, World !'; 
writeln('Writing to file: ',buf); { повідомляємо про запис до файлу} 
write(f,buf); {записуємо у кінець файлу рядок buf} 
writeln; writeln('Reading from file: '); {повідомляємо про читання інформації з файлу} 
seek(f,0); {переходимо у початок файлу} 
while( not eof(f)) do {поки не досягнемо кінця файлу виконуємо вказані нижче дії} 
begin 
read(f,buf1); {читаємо інформацію з файлу порядково} 
writeln(buf1); {виводимо прочитану інформацію на екран} 
end; 
close(f); {закриваємо файл myfile.dat} 
readkey; 
end. 

Немає коментарів:

Дописати коментар