Работа с файлове и записи
Записите представят хетерогенно множество от елементи. Елементите се наричат полета и са независими помежду си. Декларацията на тип запис изисква идентификатор и тип на всяко едно от полетата:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
| type recordTypeName = record
fieldList1: type1;
...
fieldListn: typen;
end;
Пр.:
type
TDateRec = record
Year: Integer;
Month: (Jan, Feb, Mar, Apr, May, Jun,
Jul, Aug, Sep, Oct, Nov, Dec);
Day: 1..31;
end; |
Полетата се представят в паметта като отделни променливи. Декларацията на
TDateRec не заделя памет за отделните полета. Това става, едва когато създадете конкретна инстанция по следния начин:
CODE1
| var Record1, Record2: TDateRec; |
Достъп до полетата имате посредством името на променливата запис и идентификатор на полето:
Пр.:
CODE1
2
3
| Record1.Year := 1904;
Record1.Month := Jun;
Record1.Day := 16; |
Когато многократно се обръщате към полетата на един и същ запис, използвайте оператора
with:
CODE1
2
3
4
5
6
| with Record1 do
begin
Year := 1904;
Month := Jun;
Day := 16;
end; |
Файлът е подредено множество от еднотипни елементи. За да декларирате файлов тип, използвайте следния синтаксис:
CODE1
| type fileTypeName = file of type |
По този начин се декларират типизираните файлове. За да декларирате нетипизиран файл използвайте само ключовата дума
file.
Пр.:
CODE1
2
3
4
5
6
7
| type
PhoneEntry = record
FirstName, LastName: string[20];
PhoneNumber: string[15];
Listed: Boolean;
end;
PhoneList = file of PhoneEntry; |
Съществуват два основни типа файлове:
- Двоичен файл - съхранява данните във формат, с който са представени в оперативната памет;
- Текстов файл - съхранява данните като дълъг списък от символи.
Физическият карай на файла се отбелязва от т.нар. индикатор за край на файл, който е необходим на операционната система при четене и запис в него. Всеки ред на текстовия файл се ограничава от специален символ или двойка символи, наречени индикатор за край на ред.
Операционната система разпознава файла по неговото име, което се съхранява в списък на директорията. Този списък се създава и поддържа от операционната система и съдържа информация за всеки файл в кокретна директория (име, тип, размер). За да получите достъп до външен файл (разположен във външната активна памет) по време на изпълнение на прогамата, е необходимо да създадете файлова променлива. За текстов файл файловата променлива се декларира със стандартен идентификатор
Text или
TextFile, а за двоичен файл- със стандартен идентификатор
File.
Процедурата
AssignFile асоциира име на външен файл с файлова променлива :
CODE1
| procedure AssignFile(var F; FileName: string); |
Когато параметърът
FileName е празен, F се асоциира със стандартен входен или изходен файл.
За да създадете и отворите нов файл, използвайте процедурата
Rewrite:
CODE1
| procedure Rewrite(var F: File [; Recsize: Word ] ); |
F е променлива от произволен файлов тип, асоциирана с външен файл посредством AssignFile. Recsize е незадължителен параметър.
Процедурата Append подготвя съществуващ файл за добавяне на текст в края му.
CODE1
| procedure Append(var F: Text); |
F е променлива от тип текстов файл, която трябва да бъде асоциирана с външен файл посредством
AssignFile.
Пр.:
CODE1
2
3
4
5
6
7
8
9
10
11
12
13
| var
F: TextFile;
S: string;
begin
if OpenDialog1.Execute then { Display Open dialog box }
begin
AssignFile(F, OpenDialog1.FileName); { File selected in dialog box }
Reset(F);
Readln(F, S); { Read the first line out of the file }
Edit1.Text := S; { Put string in a TEdit control }
CloseFile(F);
end;
end; |
За да терминирате връзката мъжду файловата променлива F и съответстващия и външен файл, използвайте процедурата
CloseFile:
CODE1
| procedure CloseFile(var F); |
Аналог на тази процедура е процедурата
Close в езика Pascal.
За да отворите съществуващ файл, използвайте процедурата
Reset:
CODE1
| procedure Reset(var F [: File; RecSize: Word ] ); |
Когато използвате процедурата
Reset, за да укажете режима на достъп до файла, използвайте променливата
FileMode:
CODEПо подразбиране тази променлива има стойност 2, което означава, че файлът се отваря както за четене, така и за запис. Когато
FileMode има стойност 0, файлът се отваря само за четене, а когато има стойност 1- само за запис.
Пр.:
CODE1
2
3
4
5
6
7
8
| var
F: file;
begin
AssignFile(F, FileName);
FileMode := 0; ( Set file access to read only }
Reset(F);
CloseFile(F);
end; |
За да проверите дали файловия показалец указва край на линия, използвайте функцията
Eoln:
CODE1
| function Eoln [(var F: Text) ]: Boolean; |
Функцията
Eof проверява дали текущата файлова позиция е край на файл:
CODE1
2
| function Eof(var F): Boolean;
function Eof [ (var F: Text) ]: Boolean; |