Теоретический материал: файловый ввод-вывод (Паскаль)
Способы обмена с текстовыми файлами
На этом занятии мы обобщим уже известные нам сведения о работе с текстовыми файлами и остановимся на особенностях обмена информацией между программой и текстовым файлом.
Операции чтения из файла
reset(f) - открывает существующий файл на чтение. Файловая переменная должна быть связана с внешним файлом с помощью процедуры assign.
Если существующий файл уже открыт, то он закрывается, а затем открывается вновь. Текущая позиция в файле устанавливается на начало файла.
Если f соответствует пустое имя файла (например, после вызова assign(f, '')), то после обращения к процедуре Reset(f) будет использоваться стандартный файл ввода (канал 0).
Текстовый файл становится доступным только на чтение.
При указании директивы компилятора {$I-} функция IoResult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.
read( [f : text], v1 [, v2, .... vn] ) - читает из текстового файла значения одной или более переменных.
Если параметр f не указан, то подразумевается использование стандартной файловой переменной Input. Каждый параметр v является переменной, значение которой должно быть прочитано из файла.
readln( [f : text], [v1, v2, .... vn] ) - выполняет процедуру read, затем переходит к следующей строке файла.
Процедура readln является расширением процедуры read и определена для текстовых файлов. Вызов readln(f) с указанием одного параметра-файловой переменной приводит к перемещению текущей позиции файла на начало следующей строки, если она имеется, в противном случае происходит переход к концу файла. Процедура readln без параметров полностью соответствует стандартному вводу.
При указании директивы компилятора {$I-} функция IoResult будет возвращать значение 0 в том случае, если операция завершилась успешно, и ненулевой код ошибки в противном случае.
Примечание: Процедура работает только для текстовых файлов, включая стандартный ввод. Файл должен быть открыт для ввода.
Процедура readln является очень удобным аналогом read. В случае использования readln после чтения из файла очередной порции символов (и, быть может, преобразования их в значение подходящего типа) текущий указатель файла будет перемещен на начало его следующей строки. Иными словами, остаток строки, расположенный в файле после прочитанного значения, будет пропущен.
Очень часто используется следующий способ чтения из текстового файла. В качестве параметра процедуры readln задается переменная типа string; в этом случае вся очередная строка файла целиком считывается в данную переменную, длина которой автоматически устанавливается равной длине считанной строки. Полученная из файла строка далее может быть обработана так, как это необходимо. Важно отметить, что при таком способе производится чтение только "значащих" символов строки; завершающиеся символы в данном случае играют роль межстрочных разделителей и не считываются в строковую переменную. После чтения строки текущий указатель файла устанавливается на начало следующей строки.
Операции записи в файл
rewrite(f) - cоздаёт и открывает новый файл. Файловая переменная должна быть связана с внешним файлом с помощью процедуры assign.
Если внешний файл уже существует, то он удаляется, и на его месте создаётся новый пустой файл. Если файл уже открыт, то он закрывается, а затем открывается вновь. Текущая позиция в файле устанавливается на начало файла.
Если f соответствует пустое имя файла (например, после вызова assign(f, '')), то после обращения к процедуре rewrite(f) будет использоваться стандартный файл вывода (канал 1).
Текстовый файл становится доступным только на запись.
write( [f : text], v1 [, v2, .... vn] ) - записывает значения одной или более переменных в текстовый файл.
Если параметр f не указан, то подразумевается использование стандартной файловой переменной Output. Каждый параметр v является выражением, значение которого должно быть записано в файл. Выводимое выражение должно быть символьного, целого, вещественного, строкового или булевского типа.
Параметр v может иметь вид:
<выводимое выражение : мин.размер : десятичных знаков>
|
Например:
Var
|
Такая запись означает, что мы в файл записываем действительное (не целое) число а, размером 5 знаков, 2 знака под дробную часть.
writeln( [f : text], [v1, v2, .... vn] ) - выполняет процедуру write, а затем записывает в файл метку конца строки (перевод строки).
При вызове данной процедуры с указанием только параметра-файловой переменной: writeln(f), в файл записывается метка конца строки. Процедура writeln без параметров полностью соответствует стандартному выводу на экран.
Примечание. Процедура работает только для текстовых файлов, включая стандартный вывод. Файл должен быть открыт для вывода.
Логическая функция Eoln
Часто для обработки текстовых файлов используется специфичная для них функция Eoln, позволяющая определить, достигнут ли конец строки. Если достигнут - значение функции равно True, а если нет - False. Таким образом, для анализа конкретных символов строк файла можно применить вложенный цикл типа:
while not Eof(FileName) do {пока не достигнут конец файла FileName, делай}
|
Процедура открытия файла для дополнения
append(f : Тext) - процедура открывает существующий файл для дозаписи. Если файл уже открыт, то он сначала закрывается, а затем открывается заново. Текущая позиция устанавливается на конец файла.
Если в последнем блоке файла размером 128 байтов присутствует символ Сtrl+Z (26 в коде ASCII), то текущая позиция устанавливается в файле таким образом, что при записи первым в блоке будет "затираться" символ Сtrl+Z.
Если переменной f соответствует пустое имя файла (например, после вызова assign(f, '')), то после обращения к процедуре append переменная f будет указывать на стандартный выходной файл.
После обращения к append файл f становится доступным только на запись, и Eof(f) принимает всегда значение True(истина).
Рассмотрите несколько примеров простых программ.
Program TextFile4;
|
Program TextFile5;
|
Program TextFile6;
|