Учебники

Паскаль — Обработка файлов

Паскаль рассматривает файл как последовательность компонентов, которые должны быть одинакового типа. Тип файла определяется типом компонентов. Тип данных файла определяется как —

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 в рабочем каталоге. Вы можете открыть файл с помощью текстового редактора, такого как блокнот, чтобы просмотреть данные Джона Смита.

Чтение из файла

Мы только что создали и записали в файл с именем Students.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

Файлы как параметр подпрограммы

Pascal позволяет использовать файловые переменные в качестве параметров в стандартных и пользовательских подпрограммах. Следующий пример иллюстрирует эту концепцию. Программа создает файл с именем rainfall.txt и хранит некоторые данные об осадках. Затем он открывает файл, читает данные и вычисляет среднее количество осадков.

Обратите внимание, что если вы используете параметр файла с подпрограммами, он должен быть объявлен как параметр var.

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

Текстовые файлы

Текстовый файл на языке Pascal состоит из строк символов, каждая строка которых заканчивается маркером конца строки. Вы можете объявить и определить такие файлы как —

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 предоставляет следующие функции / процедуры для обработки файлов —

процедура Append (var t: Text);

Открывает файл в режиме добавления

Назначение процедуры (out f: file; const Name :);

Присваивает имя файлу

Назначение процедуры (out f: file; p: PChar);

Присваивает имя файлу

Назначение процедуры (out f: file; c: Char);

Присваивает имя файлу

Назначение процедуры (out f: TypedFile; const Name :);

Присваивает имя файлу

процедура Assign (out f: TypedFile; p: PChar);

Присваивает имя файлу

процедура Assign (out f: TypedFile; c: Char);

Присваивает имя файлу

Назначение процедуры (out t: Text; const s :);

Присваивает имя файлу

Назначение процедуры (out t: Text; p: PChar);

Присваивает имя файлу

Назначение процедуры (out t: Text; c: Char);

Присваивает имя файлу

процедура BlockRead (var f: file; var Buf; count: Int64; var Res: Int64);

Читает данные из файла в память

процедура BlockRead (var f: file; var Buf; count: LongInt; var Result: LongInt);

Читает данные из файла в память

процедура BlockRead (var f: file; var Buf; count: Cardinal; var Result: Cardinal);

Читает данные из файла в память

процедура BlockRead (var f: file; var Buf; count: Word; var var: Word);

Читает данные из файла в память

процедура BlockRead (var f: file; var Buf; count: Word; var Res: Integer);

Читает данные из файла в память

процедура BlockRead (var f: file; var Buf; count: Int64);

Читает данные из файла в память

процедура BlockWrite (var f: file; const Buf; Count: Int64; var Res: Int64);

Записывает данные из памяти в файл

процедура BlockWrite (var f: file; const Buf; Count: LongInt; var Result: LongInt);

Записывает данные из памяти в файл

процедура BlockWrite (var f: file; const Buf; Count: Cardinal; var Result: Cardinal);

Записывает данные из памяти в файл

процедура BlockWrite (var f: file; const Buf; Count: Word; var Res: Word);

Записывает данные из памяти в файл

процедура BlockWrite (var f: file; const Buf; Count: Word; var Result: Integer);

Записывает данные из памяти в файл

процедура BlockWrite (var f: file; const Buf; Count: LongInt);

Записывает данные из памяти в файл

Закрытие процедуры (var f: file);

Закрывает файл

процедура Close (var t: Text);

Закрывает файл

функция EOF (var f: file): Boolean;

Проверяет конец файла

функция EOF (var t: Text): Boolean;

Проверяет конец файла

функция EOF: Boolean;

Проверяет конец файла

function EOLn (var t: Text): Boolean;

Проверяет конец строки

функция EOLn: Boolean;

Проверяет конец строки

процедура Erase (var f: file);

Удаляет файл с диска

процедура Erase (var t: Text);

Удаляет файл с диска

функция FilePos (var f: file): Int64;

Положение в файле

функция FileSize (var f: file): Int64;

Размер файла

процедура Flush (var t: Text);

Записывает файловые буферы на диск

функция IOResult: Word;

Возвращает результат последней операции ввода-вывода файла

процедура Read (var F: Text; Args: Arguments);

Читает из файла в переменную

процедура Read (Аргументы: Аргументы);

Читает из файла в переменную

процедура ReadLn (var F: Text; Args: Arguments);

Читает из файла в переменную и перейти к следующей строке

процедура ReadLn (Args: Аргументы);

Читает из файла в переменную и перейти к следующей строке

процедура Rename (var f: file; const s :);

Переименовывает файл на диск

процедура Rename (var f: file; p: PChar);

Переименовывает файл на диск

процедура Rename (var f: file; c: Char);

Переименовывает файл на диск

процедура Rename (var t: Text; const s);

Переименовать файл на диске

процедура Rename (var t: Text; p: PChar);

Переименовывает файл на диск

процедура Rename (var t: Text; c: Char);

Переименовывает файл на диск

процедура Reset (var f: file; l: LongInt);

Открывает файл для чтения

Сброс процедуры (var f: file);

Открывает файл для чтения

процедура Reset (var f: TypedFile);

Открывает файл для чтения

процедура Reset (var t: Text);

Открывает файл для чтения

процедура Rewrite (var f: file; l: LongInt);

Открывает файл для записи

процедура переписать (var f: file);

Открывает файл для записи

процедура переписать (var f: TypedFile);

Открывает файл для записи

процедура переписать (var t: Text);

Открывает файл для записи

поиск процедуры (var f: file; Pos: Int64);

Устанавливает положение файла

function SeekEOF (var t: Text): Boolean;

Устанавливает позицию файла в конец файла

function SeekEOF: Boolean;

Устанавливает позицию файла в конец файла

function SeekEOLn (var t: Text): Boolean;

Устанавливает позицию файла в конец строки

function SeekEOLn: Boolean;

Устанавливает позицию файла в конец строки

процедура SetTextBuf (var f: Text; var Buf);

Устанавливает размер файлового буфера

процедура SetTextBuf (var f: Text; var Buf; Size: SizeInt);

Устанавливает размер файлового буфера

процедура Truncate (var F: file);

Усекать файл в позиции

процедура Write (Аргументы: Аргументы);

Записывает переменную в файл

процедура Write (var F: Text; Args: Arguments);

Записать переменную в файл

процедура Writeln (Аргументы: Аргументы);

Записывает переменную в файл и добавляет новую строку

процедура WriteLn (var F: Text; Args: Arguments);

Записывает переменную в файл и добавляет новую строку