Заметьте, что каждая строка заканчивается признаком конца строки, даже пустая (1-ая сверху). Самый последний символ в файле — признак его конца. Реально файл хранится как сплошная последовательность символов и разбивается на строки лишь при его выводе на экран или печать. Пустой текстовый файл содержит один символ #26.

Для работы с текстовым файлом необходимо определить файловую переменную (переменную логического файла):

VAR

f : Text;

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

В системной библиотеке Турбо Паскаля определены две текст-файловые переменные: Input и Output. Они связаны с устройством 'CON' (или фиктивным устройством CRT, если подключен модуль CRT) автоматически. И если в процедурах ввода опущено имя файла, то считается, что ввод идет из системного файла Input (это клавиатура) , а если имя файла опущено в операторе вывода, то в файл Output (вывод идет на экран).

Текстовые файлы в Турбо Паскале — это вовсе не аналоги файлов типа File of Char. Знак равенства между этими типами можно поставить лишь со значительными оговорками.

<p>12.6.1. Текст-ориентированные процедуры и функции</p>

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

Таблица 12.3

Процедуры и функции

Действие

SetTextBuf( VAR f : Text; VAR Buf [; BufSize : Word]

Устанавливает размер буфера файла f равным BufSize байт. Должна выполняться перед открытием файла f. Буфер размещается в переменной Buf.

Append( VAR f : Text)

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

- 232 -

Flush( VAR f : Text)

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

EOLn( VAR f : Text) : Boolean

Функция возвращает True, если текущая позиция в файле — конец строки или конец файла, и False, если нет

SeekEOLn( VAR f : Text) : Boolean

Функция возвращает True, если достигнут конец строки или конец файла, или перед ними стоят лишь пробелы и (или) символы табуляции (#9)

SeekEOF( VAR f : Text) : Boolean

Функция возвращает True, если достигнут конец файла или перед ними стоят лишь пробелы, признаки концов строк и (или) символы табуляции

12.6.1.1. Процедура SetTextBuf(VAR I: Text; VAR Buf [;BufSize: Word]). Эта процедура служит для увеличения или уменьшения буфера ввода-вывода текстового файла f. Автоматическое значение размера буфера для текстовых файлов равно 128 байт. При интенсивном обращении к физическим файлам на диске мы рекомендуем увеличить это число до нескольких килобайт, что существенно ускорит процесс. При этом не так жестоко будут эксплуатироваться головки дисковода. Увеличение буфера должно произойти после связывания логического файла с физическим, но до первой операции ввода или вывода. Советуем взять за правило менять буфер до открытия файла. Это дает гарантию безопасности данных.

Задавая новый буфер, мы должны передать процедуре SetTextBuf не только логический файл f, но и переменную Buf, в которой этот буфер расположится. Это означает, что если под рукой нет пока незанятой переменной, то придется ввести еще одну, соответствующего размера. Тип переменной Buf не имеет значения. Важен ее размер. Буфер файла начнется с первого байта, отведенного Buf, и займет столько байт, сколько задано в необязательном параметре BufSize. Если в вызове процедуры число BufSize не указано, то

- 233 -

считается, что оно равно размеру переменной Buf. Задание BufSize больше, чем размер самой Buf, приведет к потере данных, «соседних» по памяти с Buf.

Рассмотрим вариант использования SetTextBuf (рис. 12.2).

| VAR

| ft : Text; { текстовый логический файл }

| Buf : Array [1..4*1024] of Byte; { его новый буфер }

| BEGIN

| Assign(ft,'TEXTFILE.DOC'); {файл связывается с диском }

| SetTextBuf( ft, Buf ); {меняется буфер (теперь он }

Перейти на страницу:

Поиск

Похожие книги