Обработка файлов средствами Free Pascal
В данной главе будут рассмотрены возможности языка Free Pascal для работы с файлами. По ходу изложения материала читатель также познакомится с компонентами Lazarus, предназначенными для выбора файла.
Предварительно давайте познакомимся с типами файлов.
7.1 Типы файлов в Free PascalВвод данных с клавиатуры удобен при обработке небольших объёмов информации. В случае обработки массивов, состоящих из сотен элементов, использовать ввод данных с клавиатуры нерационально. В подобных случаях данные удобно хранить в файлах. Программа будет их считывать, обрабатывать и выводить результаты на экран или в файл . Рассмотрим, как это можно сделать.
C точки зрения программиста все файлы можно разделить на три класса:
- типизированные;
- бестиповые;
- текстовые.
Файлы, состоящие из компонентов одного типа (целые, вещественные, массивы и т. д.), число которых заранее не определено и может быть любым, называются типизированными. Они заканчиваются специальным символом " конец файла ", хранятся в двоичном виде, содержимое подобных файлов нельзя просмотреть обычным текстовым редактором, для их просмотра нужно писать специальную программу.
В бестиповых файлах информация считывается и записывается блоками определённого размера. В подобных файлах хранятся данные любого вида и структуры.
Текстовые файлы состоят из любых символов. При записи информации в текстовый файл все данные преобразуются к символьному типу, в котором и хранятся. Просмотреть данные в подобном файле можно с помощью любого текстового редактора. Информация в текстовом файле хранится построчно. В конце каждой строки хранится специальный символ "конец строки ". Конец самого файла обозначается символом " конец файла ".
Для работы с файлами в программе следует описать файловую переменную. Для работы с текстовым файлом файловая переменная (например f ) описывается с помощью служебного слова text .
var f : text;
Для описания типизированных 1 Типизированные файлы иногда называют компонентными. файлов можно описать файловую переменную следующим образом:
var f : file of тип;
Бестиповый файл описывается с помощью служебного слова file .
Рассмотрим несколько примеров описания файловых переменных.
Рассмотрим последовательно работу с файлами каждого типа.
7.2 Работа с типизированными файламиЗнакомство с методами обработки типизированных файлов начнём с подпрограмм, которые являются общими для всех типов файлов.
7.2.1 Процедура AssignFileДля начала работы с файлом необходимо связать файловую переменную в программе с файлом на диске. Для этого используется процедура AssignFile(f,s) , где f — имя файловой переменной, а s — полное имя файла на диске (файл должен находиться в текущем каталоге при условии, что к нему специально не указывается путь).
Рассмотрим примеры использования AssignFile для различных операционных систем.
7.2.2 Процедуры reset, rewriteПосле установления связи между файловой переменной и именем файла на диске нужно открыть файл, воспользовавшись процедурами reset или rewrite .
Процедура reset(f) , где f — имя файловой переменной, открывает файл, связанный с файловой переменной f , после чего становится доступным для чтения первый элемент, хранящийся в файле. Далее можно выполнять чтение и запись данных из файла.
Процедура rewrite(f) создаёт пустой файл (месторасположение файла на диске определяется процедурой AssignFile ) для последующей записи в него данных.
Если файл, связанный с файловой переменной f , существовал на диске, то после выполнения процедуры rewrite вся информация в нём уничтожается.
7.2.3 Процедура СloseFileПроцедура CloseFile(f) , где f — имя файловой переменной, закрывает файл, который ранее был открыт процедурами rewrite или reset .
Процедуру CloseFile(f) следует обязательно использовать при закрытии файла, в который происходила запись данных.
Дело в том, что процедуры записи в файл не обращаются непосредственно к диску, они записывают информацию в специальный участок памяти, называемый буфером файла. После того как буфер заполнится, вся информация из него переносится в файл. При выполнении процедуры closefile сначала происходит запись буфера файла на диск, и только потом файл закрывается. Если его не закрыть вручную, то закрытие произойдёт автоматически при завершении работы программы. Однако при автоматическом закрытии файла информация из буфера файла не переносится на диск, и, как следствие, часть информации может пропасть.
После записи информации в файл, его обязательно закрывать с помощью процедуры CloseFile. Однако при чтении данных из файла нет необходимости в обязательном закрытии файла.
7.2.4 Процедура renameПереименование файла, связанного с файловой переменной f , осуществляется в то время, когда он закрыт, при помощи процедуры rename(f,s) , где f — файловая переменная, s — новое имя файла (строковая переменная).
7.2.5 Процедура eraseУдаление файла, связанного с переменной f , выполняется посредством процедуры erase(f) , в которой f также является именем файловой переменной. Для корректного выполнения этой операции файл должен быть закрыт.
7.2.6 Функция eofФункция eof(f) (end of file), где f — имя файловой переменной, принимает значение "истина" ( true ), если достигнут конец файла, иначе — "ложь" ( false ). С помощью этой функции можно проверить, достигнут ли конец файла и можно ли считывать очередную порцию данных.