Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Программирование - 09 - Файлы.doc
Скачиваний:
10
Добавлен:
09.03.2016
Размер:
235.01 Кб
Скачать

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

Текстовый файл — это файл, компонентами которого являются строки переменной длины (в том числе могут быть и пустые строки), т.е. текстовый файл — совокупность символов, разделенных на строки. Каждая строка завершается маркером конца строки EoLn (End of Line): CR/LF ($0D/$0A). Файл завершается маркером конца файла EoF (End of File): ^Z ($1A).

Особенностью работы с текстовыми файлами является то, что параметры, значения которых вводятся из файла и выводятся в файл, могут быть не обязательно типа String или Char, а и других простых типов (целых, вещественных типов при вводе; целых, вещественных, типа Boolean — при выводе).

Указатель текстового файла (в отличие от указателя типизованного файла) после выполнения одной элементарной операции ввода/вывода не обязательно передвигается от одной компоненты (для текстового файла — строки) к следующей компоненте (следующей строке), он может передвигаться (в зависимости от конкретной операции) в пределах одной строки.

Доступ к информации текстового файла возможен лишь последовательно, начиная с первого символа первой строки. При работе с текстовыми файлами нельзя одновременно вводить и выводить информацию.

Формат описания:

Var

имя_переменной_файла:Text;

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

Процедуры Assign,ReSet,ReWrite,Close,Erase,ReNameи функцииEoF,IOResult, которые были рассмотрены ранее в связи с обработкой типизованных файлов, применяются и для работы с текстовыми файлами.

При этом (в отличие от применения к типизованным файлам) при открытии текстового файла с помощью процедуры ReSetможно лишьпоследовательно читатьиз файла (от начала файла). При открытии текстового файла с помощью процедурыReWrite— можно лишьпоследовательно выводитьинформацию в файл (создание нового файла). ПроцедураCloseдля нового текстового файла кроме его закрытия предварительновставляетв концемаркер конца файла.

Функция EoFвозвращает значениеTrueдля текстового файла, еслиуказатель файла установлен на маркер конца файла.

В связи со сказанным выше становится очевидной необходимость при работе с текстовыми файлами следующей процедуры.

Procedure ...

Append ( var F : Text ) ;

открывает (для добавления и только для добавления) существующий текстовый файл и устанавливает указатель файла на маркер конца файла; если процедура применяется к несуществующему файлу, то возникает ошибка I/O; до выполнения процедуры должна быть выполнена процедураAssign

Вводинформациииз текстового файлаосуществляется с помощью следующих процедур.

Procedure ...

Read ( [ var F : Text ] ; [ <список ввода>] ) ;

из текстового файла, с которым связана файловая переменная F, читаются значения для одной или нескольких переменных списка ввода

ReadLn ( [ var F : Text ] ; [ <список ввода>] ) ;

то же, что и процедура Read, но непрочитанная часть строки, включая признак (маркер) конца строки, пропускается

Если в процедурах чтения файловая переменная отсутствует, считается, что используется стандартная файловая переменнаяINPUT, а ввод стандартно осуществляетсяс клавиатуры.

Список ввода — перечисленные через запятую имена переменных (целых, вещественных типов, типаCharили типаString), которым присваиваются введенные значения. Количество переменных может быть любым (список может быть и пустым). В случае пустого списка процедурыReadLnпроисходит пропуск строки текстового файла.

Так как в текстовом файле информация хранится в виде символов, то при вводе значений целых и вещественных типов автоматически происходит перекодированиеинформациив двоичный формат. Отдельные числа в текстовом файле должны отделяться пробелами, знаками табуляции или маркерами конца строки (при чтении числовых значений указанные разделители пропускаются, и при нахождении первого значащего символа в записи числа чтение продолжается до следующего разделителя; выделенная таким образом подстрока и считается символьной записью числа).

При вводе символа (тип Char) из файла читается один символ, в том числе и маркер конца строки, и маркер конца файла.

При вводе значения типа Stringиз файла читаетсянеобходимое число символов, нов пределах одной строки(до маркера конца строки). При этом если чтение осуществляется процедуройRead, признак конца строки не читается, и при последующем чтении строковой информации в соответствующие переменные ничего заноситься не будет до тех пор, пока не будет прочитан маркер конца строки (например, процедуройReadLn).

Выводинформациив текстовый файлосуществляется с помощью следующих процедур.

Procedure ...

Write ( [ var F : Text ] ; [ <список вывода>] ) ;

в текстовый файл, с которым связана файловая переменная F, записываются значения выражений списка вывода

WriteLn ( [ var F : Text ] ; [ <список вывода>] ) ;

то же, что и процедура Write, но выводимая информация завершается маркером конца строки (осуществляется переход к новой строке файла)

Если в процедурах вывода файловая переменная отсутствует, считается, что используется стандартная файловая переменнаяOUTPUT, а вывод стандартно осуществляетсяна экран дисплея.

Список вывода — перечисленные через запятую выражения (целых, вещественных типов, типаChar, типаBooleanили типаString), значения которых выводятся в текстовый файл. Число элементов списка вывода может быть любым (список может быть и пустым). В случае пустого списка процедураWriteне выполняет никаких действий, а процедураWriteLnосуществляет переход на новую строку.

При выводе чисел происходит их автоматическая перекодировка в символьную форму.

В случае логической величины, ее значение выводится словом TRUEилиFALSE.

Так как элементы списка вывода в общем случае являются выражениями, то они, в частности, могут быть и строковыми константами, что позволяет осуществлять комментированный вывод информации.

При выводе информации в текстовый файл по умолчанию отводится количество позиций, равное размеру этой информации: при выводе символа отводится одна позиция, при выводе строки — число позиций, равное длине строки, при выводе целого числа — число позиций, равное числу значащих цифр плюс одна позиция под знак, если число отрицательное. Это необходимо учитывать при выводе последовательных элементов информации (например, нескольких целых чисел) и предусматривать меры, чтобы отдельные элементы информации не сливались друг с другом: вывод разделяющих пробелов, разнесение информации по разным строкам и т.д.

Исключение составляют вещественные числа — под них выделяется 17 позиций, и при выводе они выравниваются по правому краю выделенного поля.

Изменить стандартную форму вывода можно, используя систему форматов языка (так, как это уже осуществлялось ранее при элементарном выводе, т.е. при использовании по умолчанию стандартной файловой переменнойOUTPUT).

Кроме упомянутых выше функций для работы с текстовыми файлами используются следующие функции.

Function ...

SeekEoF ( var F : Text ) : Boolean ;

как и функция EoFфиксирует конец файла, но в отличие отEoFфункцияSeekEoFпропускает (игнорирует) стоящие в конце файла пробелы, знаки табуляции и маркеры конца строки

EoLn ( var F : Text ) : Boolean ;

возвращает значение True, если указатель установлен на маркер конца строки или если функцияEoFпринимает значениеTrue, иFalse— в остальных случаях

SeekEoLn ( var F : Text ) : Boolean ;

как и функция EoLnфиксирует конец строки, но в отличие отEoLnфункцияSeekEoLnпропускает (игнорирует) стоящие в конце строки пробелы и знаки табуляции

Основные виды работ с текстовыми файлами: создание, дополнение (корректировка), использование (чтение).