|
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 ); {меняется буфер (теперь он }
| >{в переменной размером 4K) }
| >Reset( ft ); {открытие файла }
| >Read( ft,...) {операции ввода - все как обычно }
| >Reset( ft ); { возврат в самое начало файла }
| >{ буфер no-прежнему в Buf, 4K }
| >Прочие действия с файлом ft
| >...
| END.
Рис. 12.2
Будучи однажды установленным для файла ft, буфер не меняет своего места и (или) размера до следующего вызова SetTextBuf или Assign с той же файловой переменной ft.
Переменная, отводимая под буфер, должна быть глобальной или, по крайней мере, существовать до конца работы с данным файлом. В самом деле, если создать конструкцию типа рис. 12.3, то все как будто должно работать, но не будет.
| PROCEDURE GetFileAndOpenIt( VAR f : Text );
| VAR
| >Buffer : Array [1..16*1024] of Byte; { буфер }
| >FileName : String; { имя файла }