Паскаль - Обработка файлов
Паскаль рассматривает файл как последовательность компонентов, которые должны быть одного типа. Тип файла определяется типом компонентов. Тип данных файла определяется как -
type
file-name = file of base-type;
Где базовый тип указывает тип компонентов файла. Базовый тип может быть любым, например, целочисленным, вещественным, логическим, перечислимым, поддиапазоном, записью, массивами и наборами, за исключением другого типа файла. Переменные типа файла создаются с использованием объявления var -
var
f1, f2,...: file-name;
Ниже приведены несколько примеров определения некоторых типов файлов и файловых переменных.
type
rfile = file of real;
ifile = file of integer;
bfile = file of boolean;
datafile = file of record
arrfile = file of array[1..4] of integer;
var
marks: arrfile;
studentdata: datafile;
rainfalldata: rfile;
tempdata: ifile;
choices: bfile;
Создание и запись в файл
Давайте напишем программу, которая создаст файл данных для записей студентов. Он создаст файл с именем student.dat и запишет в него данные студента -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
Assign(f,'students.dat');
Rewrite(f);
Student.s_name := 'John Smith';
Student.s_addr := 'United States of America';
Student.s_batchcode := 'Computer Science';
Write(f,Student);
Close(f);
end.
При компиляции и запуске программа создаст файл с именем student.dat в рабочем каталоге. Вы можете открыть файл с помощью текстового редактора, например блокнота, чтобы просмотреть данные Джона Смита.
Чтение из файла
Мы только что создали и записали в файл с именем student.dat. Теперь давайте напишем программу, которая будет читать данные ученика из файла -
program DataFiles;
type
StudentRecord = Record
s_name: String;
s_addr: String;
s_batchcode: String;
end;
var
Student: StudentRecord;
f: file of StudentRecord;
begin
assign(f, 'students.dat');
reset(f);
while not eof(f) do
begin
read(f,Student);
writeln('Name: ',Student.s_name);
writeln('Address: ',Student.s_addr);
writeln('Batch Code: ', Student.s_batchcode);
end;
close(f);
end.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Name: John Smith
Address: United States of America
Batch Code: Computer Science
Файлы как параметр подпрограммы
Паскаль позволяет использовать файловые переменные в качестве параметров в стандартных и определяемых пользователем подпрограммах. Следующий пример иллюстрирует эту концепцию. Программа создает файл с именем rainfall.txt и сохраняет некоторые данные об осадках. Затем он открывает файл, считывает данные и вычисляет среднее количество осадков.
Обратите внимание: if you use a file parameter with subprograms, it must be declared as a var parameter.
program addFiledata;
const
MAX = 4;
type
raindata = file of real;
var
rainfile: raindata;
filename: string;
procedure writedata(var f: raindata);
var
data: real;
i: integer;
begin
rewrite(f, sizeof(data));
for i:=1 to MAX do
begin
writeln('Enter rainfall data: ');
readln(data);
write(f, data);
end;
close(f);
end;
procedure computeAverage(var x: raindata);
var
d, sum: real;
average: real;
begin
reset(x);
sum:= 0.0;
while not eof(x) do
begin
read(x, d);
sum := sum + d;
end;
average := sum/MAX;
close(x);
writeln('Average Rainfall: ', average:7:2);
end;
begin
writeln('Enter the File Name: ');
readln(filename);
assign(rainfile, filename);
writedata(rainfile);
computeAverage(rainfile);
end.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Enter the File Name:
rainfall.txt
Enter rainfall data:
34
Enter rainfall data:
45
Enter rainfall data:
56
Enter rainfall data:
78
Average Rainfall: 53.25
Текстовые файлы
Текстовый файл в Паскале состоит из строк символов, каждая строка которых заканчивается маркером конца строки. Вы можете объявить и определить такие файлы как -
type
file-name = text;
Разница между обычным файлом символов и текстовым файлом состоит в том, что текстовый файл разделен на строки, каждая из которых заканчивается специальным маркером конца строки, автоматически вставляемым системой. В следующем примере создается и записывается в текстовый файл с именем contact.txt -
program exText;
var
filename, data: string;
myfile: text;
begin
writeln('Enter the file name: ');
readln(filename);
assign(myfile, filename);
rewrite(myfile);
writeln(myfile, 'Note to Students: ');
writeln(myfile, 'For details information on Pascal Programming');
writeln(myfile, 'Contact: Tutorials Point');
writeln('Completed writing');
close(myfile);
end.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Enter the file name:
contact.txt
Completed writing
Добавление к файлу
Добавление к файлу означает запись в существующий файл, в котором уже есть некоторые данные, без перезаписи файла. Следующая программа иллюстрирует это -
program exAppendfile;
var
myfile: text;
info: string;
begin
assign(myfile, 'contact.txt');
append(myfile);
writeln('Contact Details');
writeln('[email protected]');
close(myfile);
(* let us read from this file *)
assign(myfile, 'contact.txt');
reset(myfile);
while not eof(myfile) do
begin
readln(myfile, info);
writeln(info);
end;
close(myfile);
end.
Когда приведенный выше код компилируется и выполняется, он дает следующий результат:
Contact Details
[email protected]
Note to Students:
For details information on Pascal Programming
Contact: Tutorials Point
Функции обработки файлов
Free Pascal предоставляет следующие функции / процедуры для работы с файлами:
Sr. No. | Название и описание функции |
---|---|
1 | procedure Append(var t: Text); Открывает файл в режиме добавления |
2 | procedure Assign(out f: file; const Name:); Присваивает имя файлу |
3 | procedure Assign(out f: file; p: PChar); Присваивает имя файлу |
4 | procedure Assign(out f: file; c: Char); Присваивает имя файлу |
5 | procedure Assign(out f: TypedFile; const Name:); Присваивает имя файлу |
6 | procedure Assign(out f: TypedFile; p: PChar); Присваивает имя файлу |
7 | procedure Assign(out f: TypedFile; c: Char); Присваивает имя файлу |
8 | procedure Assign(out t: Text; const s:); Присваивает имя файлу |
9 | procedure Assign(out t: Text; p: PChar); Присваивает имя файлу |
10 | procedure Assign(out t: Text; c: Char); Присваивает имя файлу |
11 | procedure BlockRead(var f: file; var Buf; count: Int64; var Result: Int64); Считывает данные из файла в память |
12 | procedure BlockRead(var f: file; var Buf; count: LongInt; var Result: LongInt); Считывает данные из файла в память |
13 | procedure BlockRead(var f: file; var Buf; count: Cardinal; var Result: Cardinal); Считывает данные из файла в память |
14 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Word); Считывает данные из файла в память |
15 | procedure BlockRead(var f: file; var Buf; count: Word; var Result: Integer); Считывает данные из файла в память |
16 | procedure BlockRead(var f: file; var Buf; count: Int64); Считывает данные из файла в память |
17 | procedure BlockWrite(var f: file; const Buf; Count: Int64; var Result: Int64); Записывает данные из памяти в файл |
18 | procedure BlockWrite(var f: file; const Buf; Count: LongInt; var Result: LongInt); Записывает данные из памяти в файл |
19 | procedure BlockWrite(var f: file; const Buf; Count: Cardinal; var Result: Cardinal); Записывает данные из памяти в файл |
20 | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Word); Записывает данные из памяти в файл |
21 год | procedure BlockWrite(var f: file; const Buf; Count: Word; var Result: Integer); Записывает данные из памяти в файл |
22 | procedure BlockWrite(var f: file; const Buf; Count: LongInt); Записывает данные из памяти в файл |
23 | procedure Close(var f: file); Закрывает файл |
24 | procedure Close(var t: Text); Закрывает файл |
25 | function EOF(var f: file):Boolean; Проверяет конец файла |
26 | function EOF(var t: Text):Boolean; Проверяет конец файла |
27 | function EOF: Boolean; Проверяет конец файла |
28 | function EOLn(var t: Text):Boolean; Проверяет конец строки |
29 | function EOLn: Boolean; Проверяет конец строки |
30 | procedure Erase(var f: file); Удаляет файл с диска |
31 год | procedure Erase(var t: Text); Удаляет файл с диска |
32 | function FilePos( var f: file):Int64; Позиция в файле |
33 | function FileSize(var f: file):Int64; Размер файла |
34 | procedure Flush(var t: Text); Записывает файловые буферы на диск |
35 год | function IOResult: Word; Возвращает результат последней операции ввода-вывода файла |
36 | procedure Read(var F: Text; Args: Arguments); Читает из файла в переменную |
37 | procedure Read(Args: Arguments); Читает из файла в переменную |
38 | procedure ReadLn(var F: Text; Args: Arguments); Читает из файла в переменную и переходит к следующей строке |
39 | procedure ReadLn(Args: Arguments); Читает из файла в переменную и переходит к следующей строке |
40 | procedure Rename(var f: file; const s:); Переименовывает файл на диске |
41 год | procedure Rename(var f: file; p: PChar); Переименовывает файл на диске |
42 | procedure Rename(var f: file; c: Char); Переименовывает файл на диске |
43 | procedure Rename(var t: Text; const s); Переименовать файл на диске |
44 | procedure Rename(var t: Text; p: PChar); Переименовывает файл на диске |
45 | procedure Rename( var t: Text; c: Char); Переименовывает файл на диске |
46 | procedure Reset(var f: file; l: LongInt); Открывает файл для чтения |
47 | procedure Reset(var f: file); Открывает файл для чтения |
48 | procedure Reset(var f: TypedFile); Открывает файл для чтения |
49 | procedure Reset(var t: Text); Открывает файл для чтения |
50 | procedure Rewrite(var f: file; l: LongInt); Открывает файл для записи |
51 | procedure Rewrite(var f: file); Открывает файл для записи |
52 | procedure Rewrite(var f: TypedFile); Открывает файл для записи |
53 | procedure Rewrite(var t: Text); Открывает файл для записи |
54 | procedure Seek(var f: file; Pos: Int64); Устанавливает положение файла |
55 | function SeekEOF(var t: Text):Boolean; Устанавливает позицию файла в конец файла |
56 | function SeekEOF: Boolean; Устанавливает позицию файла в конец файла |
57 | function SeekEOLn(var t: Text):Boolean; Устанавливает позицию файла в конец строки |
58 | function SeekEOLn: Boolean; Устанавливает позицию файла в конец строки |
59 | procedure SetTextBuf(var f: Text; var Buf); Устанавливает размер файлового буфера |
60 | procedure SetTextBuf(var f: Text; var Buf; Size: SizeInt); Устанавливает размер файлового буфера |
61 | procedure Truncate(var F: file); Обрезать файл в позиции |
62 | procedure Write(Args: Arguments); Записывает переменную в файл |
63 | procedure Write(var F: Text; Args: Arguments); Записать переменную в файл |
64 | procedure Writeln(Args: Arguments); Записывает переменную в файл и добавляет новую строку |
65 | procedure WriteLn(var F: Text; Args: Arguments); Записывает переменную в файл и добавляет новую строку |