Романов О.М. Файли
В тих випадках, коли даних багато або їх треба довго зберігати, застосовують файли. Файл – це сукупність даних однакового типу. Таке визначення зберігається з визначенням масиву, але, на відміну від останнього, файл зберігають на диску, кількість даних у файлі при його описі не вказується, елементи файлів не мають індексів. Опис файлового типу має вигляд: Type =file of ; Наприклад. Type CLASS= file of integer; Var uchen:CLASS; Uchen це змінна файлового типу. Або: Type CHILDERN=record Surname : string[15]; Name : string[100]; Birthyear : integer; Street : string[20]; Phone : string[8]; End; var uchen: file of CHILDERN;
Романов О.М. Процедури і функції для роботи з файлами Assign Процедура зв'язує деякий зовнішній файл на диску з файловою змінною. Reset Процедура відкриває уже раніше існуючий файл даних на диску для зчитування і запису даних. Rewrite Процедура створює файл і відкриває його. Якщо файл з таки ім'ям уже існує, то його зміст знищується. Close Процедура закриває файл. Eof Функція набуває значення true, якщо досягнуто кінець файлу, інакше набуває значення false. IOResult Функція використовується для пошуку помилок при роботі з файлами. Якщо знайдено помилку в останній операції введення/виведення, то функція буде рівна 1, інакше – 0. При цьому автоматичний контроль перед цим повинен бути вимкнутий з допомогою директиви {$I-}.
Романов О.М. Запис і зчитування даних з файлу Write Формат Write(, ); Read Формат Read(, ); Наприклад. Program FileRead; Type CHILDERN=string[15]; var class: file of CHILDERN; Surname: CHILDERN; Begin Assign(class,school.dat); Reset(class); Read(class,Surname); Write(Призвіще учня: ); Writeln( Surname ); Close(class); End.
Романов О.М. Приклад програми. Program FileWriteRead; Uses Crt; Type CHILDERN=record Surname : string[15]; Name : string[100]; Birthyear : integer; Street : string[20]; Phone : string[8]; End; var : CLASS:file of CHILDERN; uchen: CHILDERN; litera:char; i:integer; Procedure create_file_school; Begin {$I-} Assign(CLASS,school.dat); Reset(CLASS); If Ioresult<>0 then begin rewrite(class); If IOResult<>0 then write(Помилка при відкритті файла) end; {$I-} end; (продовження на слідуючому слайді)
Романов О.М. Procedure Input_data_school; Procedure Input_data; Begin With UCHEN do Begin Write(Введіть призвіще учня:); Readln(Surname); Write(Введіть ім'я учня:); Readln(Name); Write(Введіть рік народження:); Readln(Birthyear ); Write(Введіть адресу учня:); Readln(Street ); Write(Введіть телефон учня:); Readln(Phone ); End; (продовження на слідуючому слайді)
Романов О.М. Procedure zapus_data; Begin Assign(CLASS,shool.dat); Reset(CLASS); Seek(CLASS,i); With uchen do If length(Surname)>0 then write(CLASS,UCHEN); i:=i+1; End; Begin Fillchar(CLASS,SiceOF(CLASS), ); Writeln; With uchen do Input_data; zapus_data; End; (продовження на слідуючому слайді)
Романов О.М. Function Povtor:boolean; Begin Writeln; Write(Будете ще вводити дані (Y/N)?); Writeln; Litera:=ReadKey; If (Litera=N) or (Litera=n) then Povtor:=true else Povtor:=false; End; Procedure read_data; Begin Seek(CLASS,0); While (not eof(CLASS)) do begin Read(CLASS,UCHEN); Write(UCHEN. Surname ); Write(,UCHEN. Name ); Write(,UCHEN. Birthyear ); Write(,UCHEN. Street ); Write(,UCHEN. Phone ); End; end; Begin Create_file_school; i:=1; Repeat Input_data_school; Until Povtor; Writeln; read_data; close(CLASS); end.
Романов О.М. Типізовані файли Типізованих файлах – структура даних, що складається із пронумерованих компонентів нового типу. Перший компонент файлу має номер нуль. Seek Оптимізує прямий доступ до файлу, котра переміщує вказівник поточної позиції файлу Seek(, ) – цей вираз типу longint вказує номер компонента. Текстові файли описуються так: var : text; Дані файлу можна зчитати за допомогою команд, кожна наступна дана команда зчитує дані з наступного рядка: read(, ); write(, ); Дана процедура використовується для файлів котрі створенні процедурою Rewrite і для відкритих процедурою Reset. Для роботи з прямим доступом використовуються функції: filesize Повертає поточний розмір файлу (Filesize ) Filepos Повертає поточний номер позиції вказівника в файлі (позиції нумеруються з нуля). (Filepos )
Романов О.М. Текстові файли Дані у типізованих файлах, описаних вище, певним чином кодуються комп'ютером. Ці файли не можна редагувати або переглядати за допомогою звичайного текстового редактора. Тому, окрім типових, використовують текстові файли, які не мають такого недоліку. Елементами текстових файлів є порядки (послідовність символів: букв, цифр знаків та пропусків). Такий файл можна створювати та редагувати з допомогою текстового редактора. Розмежовувачем між елементами файлу є пропуск. Утворення кожного рядка закінчується натисканням на клавішу вводу. Для перевірки чи є символи у рядку використовують функцію eoln (наприклад, eoln ), яка приймає значення true, якщо знайдено кінець рядка. Текстові файли описуються так: var : text; Дані рядка текстового файлу можна зчитати за допомогою команд, кожна наступна дана команда зчитує дані з наступного рядка: read(, ); readln(, ); При виконанні readln зайві дані ігноруються. Процедура Append відкриває текстовий файл для запису, при цьому вказівник файла встановлюється на кінець файлу і нові елементи добавляються до раніше існуючих.
Романов О.М. Створити рядок текстового файлу можна з допомогою звичайного текстового редактора або програмним способом за допомогою команд write (, ); writeln (, ); На відміну від звичайних файлів у текстовий файл можна додавати (дописувати) дані. Для цього замість процедури rewrite використовують процедуру append( );
Романов О.М. Не типізовані файли При оголошені не типізованих файлів вказується тільки одне слово file. Var f:file; Seek Не типізований файл не має жорстко встановлених одиниць запису, як типізований файл. В даних файлах за одне звернення зчитується/записуєтьсяя число байт приблизно рівне величині буфера введення/виведення, що сприяє збільшенню швидкості робот з файлом. В якості буфера введення/виведення може виступати будь-яка змінна. Для роботи з Не типізованим файлом можна застосувати всі процедури і функції, крім read і write. Замість їх використовують blookread і blookwrite. А процедури reset і rewrite можуть мати другий параметр, котрий визначає розмір запису використаний при передачі.