Организация работы с файлами
Для работы с файлом в программе необходимо описать файловую переменную соответствующего типа, например:
var F:text – для текстового файла;
F:file of тип_компонентов – для типизированного файла.
Файловую переменную связывают с конкретным файлом на диске, указывая его имя.
Затем файл открывают, записываютв файл и/или читают из файла данные. Текущую позицию в файле при чтении и записи определяет файловый указатель, который при открытии файла указывает на начало файла, а в результате чтения и записи устанавливается после прочитанного или записанного компонента файла.
Чтение и запись реализуются через буфер обмена, выделяемый в оперативной памяти для каждого файла. При записи данные сначала помещаются в буфер, и только после его заполнения записываются в файл. При чтении буфер заполняется данными из файла. Программа читает из буфера, который повторно заполняется только при отсутствии в нем требуемого компонента. Наличие буфера позволяет значительно уменьшить число обращений к диску.
Завершив работу с файлом, его закрывают, при этом оставшиеся незаписанными данные из буфера пишутся в файл. Если файл не закрыть, эти данные можно потерять.
Все действия с файлами реализуются стандартными процедурами и функциями, в которых файловая переменная является первым параметром.
Замечание. Файловая переменная передается только по ссылке.
Подпрограммы для работы с файлами любых типов
Связывание файловой переменной с файлом
procedureAssign(F, name)
где name ‑ строковое выражение (в частности, переменная или константа), задающее имя файла.
Если файл находится в текущем каталоге, указывается только имя файла, например, Assign(F,’data.txt’).
При необходимости задают имя файла и путь к нему по правилам операционной системы.
Нельзя с одной файловой переменной связывать несколько файлов. Закрыв файл процедурой Close, файловую переменную можно связать с другим файлом.
Если из файла предполагается только читать, с ним можно связать несколько файловых переменных, каждая из которых будет «отвечать» за свой режим чтения. При записи использовать для одного файла несколько файловых переменных нельзя.
Открытие нового файла
procedureRewrite(F)
Создает и открывает новый (пустой) файл, файловый указатель устанавливается в его начало. Если файл, связанный с файловой переменной, существует, он предварительно уничтожается.
Если файл текстовый, в него можно только записывать. Для типизированного файла можно и писать, и читать.
Открытие существующего файла
procedure Reset(F)
Файловый указатель устанавливается в начало файла. Если файл, связанный с файловой переменной, не существует, возникает ошибка.
Если файл текстовый, из него можно только читать. Для типизированного файла можно и писать, и читать.
Повторный вызов ReSet переустанавливает файловый указатель в начало файла.
Проверки конца файла
function Eof(F): boolean
Функция (означает End of file) возвращает true, если файловый указатель находится за последним компонентом файла (т.е. на конце файла).
Чтение из файла
procedureRead(F,список переменных)
Данные из файла читаются в указанные переменные. После чтения файловый указатель устанавливается после прочитанных данных.
– Из текстовых файлов можно вводить целые и вещественные числа, символы и строки (числа перед занесением в переменную преобразуются из символьного представления в двоичный код чисел). Если перед вводом файловый указатель уже стоит на конце файла и ввод происходит в строковую переменную, она останется пустой и ошибки не будет. Для переменных других типов произойдет ошибка ввода.
– Для типизированных файлов тип переменных должен совпадать с типом компонентов файла, который может быть структурированным (например, массивом, записью). Ввод за концом файла приведет к ошибке.
Запись в файл
procedureWrite(F, список выражений)
Данные записываются в файл. После записи файловый указатель устанавливается после записанных данных.
– В текстовые файлы можно записывать значения выражений целых, вещественных, символьных, строковых и булевских типов (числа и логические значения перед записью преобразуются из двоичного кода в символьное представление).
– Для типизированных файлов тип выражений должен совпадать с типом компонентов файла.
Закрытие файла
procedureClose(F)
Завершается работа с файлом. Если в файл велась запись, неполный буфер записывается в файл. Однако связь файловой переменной с файлом сохраняется, и файл можно заново открыть без повторного вызова Assign.
После закрытия файла файловую переменную можно связать с другим файлом с помощью Assign.