ВУЗ:
Составители:
Рубрика:
17
Таблица 3. Процедуры и функции, работающие с текстовыми файлами.
Процедуры и функции Действие
SetTextBuf (var f: Text;
var Buf[, BufSize: Word])
Устанавливает размер буфера файла f равным
BufSize байт. Должна выполняться перед от-
крытием файла f. Буфер размещается в
переменной Buf.
Append (var f: Text)
Открывает текстовый файл f для дозаписи в
конец файла
Flush (var f : Text)
Выводит текущее содержимое буфера в физи-
ческий файл, не дожидаясь заполнения буфера
до конца. Имеет смысл только при записи в
файл.
EOLn (var f : Text): Boo-
lean
Функция возвращает TRUE, если текущая по-
зиция в файле - конец строки или конец файла,
и FALSE, если нет
SeekEOLn (var f : Text):
Boolean
Функция возвращает TRUE, если достигнут
конец строки, или перед ним стоят лишь пробе-
лы и (или) символы табуляции (#9)
SeekEOF (var f : Text):
Boolean
Функция возвращает TRUE, если достигнут
конец файла, или перед ним стоят лишь пробе-
лы, признаки концов строк и (или) символы
табуляции
Рассмотрим текст-ориентированные процедуры и функции подробнее.
1) Процедура SetTextBuf (Var f : Text; var Buf [, BufSize : Word]) –
служит для увеличения или уменьшения буфера ввода - вывода текстового
файла f. При интенсивном обращении к физическим файлам на диске мы ре-
комендуем увеличить число размера буфера (по умолчанию размер буфера
равен 128 байт) до нескольких килобайт, что существенно ускорит процесс
ввода-вывода. При этом не так жестко будут эксплуатироваться головки дис-
ковода. Увеличение буфера должно произойти после связывания логического
файла с физическим, но до первой операции ввода или вывода. Советуем
взять за правило менять буфер до открытия файла. Это дает гарантию безо-
пасности данных.
Задавая новый буфер, мы должны передать процедуре SetTextBuf не
только логический файл f, но и переменную Buf, в которой этот буфер будет
расположен. Тип переменной Buf не имеет значения. Важен ее размер. Буфер
18
файла начнется с его первого байта, отведенного Buf, и займет столько байт,
сколько задано в необязательном параметре BufSize.
Если в вызове процедуры число BufSize не указано, то считается что
оно равно размеру переменной Buf. Задание BufSize больше, чем размер са-
мой Buf, приведет к потере данных, “соседних” по памяти с Buf.
Рассмотрим вариант использования SetTextBuf:
var
ft : text; { текстовый логический файл}
s:string;
Buf:array {1..4*1024} of Byte; {его новый буфер}
begin
Assign(ft, ′TEXTFILE.DOC′); {файл связывается с диском}
SetTextBuf (ft, Buf); {меняется буфер (теперь он в пере-
менной размером 4К)}
Reset(ft); {открытие файла}
Readln(ft, …); {чтение одной записи}
Reset(ft); { возврат в самое начало файла}
{ буфер по-прежнему в Buf, 4K}
{Прочие действия с файлом ft}
…
end.
Будучи однажды установленным, буфер не меняет своего места и (или)
размера до следующего вызова SetTextBuf или Assign с той же файловой пе-
ременной ft.
Переменная, отводимая под буфер, должна быть глобальной или, по
крайней мере, существовать до конца работы с данным файлом. В самом де-
ле, если создать конструкцию, представленную ниже, то все
как будто
должно работать, но не будет.
procedure GetFileAndOpenIt (var f : Text);
var
Buffer:array [1..16*1024] of Byte; {буфер}
FileName:string; {имя файла}
begin
Readln(FileName); {считывается имя файла}
Assign(f, FileName);
SetTextBuf(f, Buffer); {назначение буфера}
Rewrite(f); {открытие файла f}
end.
файла начнется с его первого байта, отведенного Buf, и займет столько байт, Таблица 3. Процедуры и функции, работающие с текстовыми файлами. сколько задано в необязательном параметре BufSize. Процедуры и функции Действие Если в вызове процедуры число BufSize не указано, то считается что оно равно размеру переменной Buf. Задание BufSize больше, чем размер са- Устанавливает размер буфера файла f равным SetTextBuf (var f: Text; BufSize байт. Должна выполняться перед от- мой Buf, приведет к потере данных, соседних по памяти с Buf. var Buf[, BufSize: Word]) крытием файла f. Буфер размещается в Рассмотрим вариант использования SetTextBuf: переменной Buf. Открывает текстовый файл f для дозаписи в var Append (var f: Text) конец файла ft : text; { текстовый логический файл} s:string; Выводит текущее содержимое буфера в физи- Buf:array {1..4*1024} of Byte; {его новый буфер} ческий файл, не дожидаясь заполнения буфера begin Flush (var f : Text) до конца. Имеет смысл только при записи в Assign(ft, ′TEXTFILE.DOC′); {файл связывается с диском} файл. SetTextBuf (ft, Buf); {меняется буфер (теперь он в пере- Функция возвращает TRUE, если текущая по- EOLn (var f : Text): Boo- менной размером 4К)} зиция в файле - конец строки или конец файла, lean Reset(ft); {открытие файла} и FALSE, если нет Readln(ft, ); {чтение одной записи} Функция возвращает TRUE, если достигнут Reset(ft); { возврат в самое начало файла} SeekEOLn (var f : Text): конец строки, или перед ним стоят лишь пробе- { буфер по-прежнему в Buf, 4K} Boolean лы и (или) символы табуляции (#9) {Прочие действия с файлом ft} Функция возвращает TRUE, если достигнут SeekEOF (var f : Text): конец файла, или перед ним стоят лишь пробе- end. Boolean лы, признаки концов строк и (или) символы табуляции Будучи однажды установленным, буфер не меняет своего места и (или) размера до следующего вызова SetTextBuf или Assign с той же файловой пе- Рассмотрим текст-ориентированные процедуры и функции подробнее. ременной ft. Переменная, отводимая под буфер, должна быть глобальной или, по 1) Процедура SetTextBuf (Var f : Text; var Buf [, BufSize : Word]) крайней мере, существовать до конца работы с данным файлом. В самом де- служит для увеличения или уменьшения буфера ввода - вывода текстового ле, если создать конструкцию, представленную ниже, то все как будто файла f. При интенсивном обращении к физическим файлам на диске мы ре- должно работать, но не будет. комендуем увеличить число размера буфера (по умолчанию размер буфера равен 128 байт) до нескольких килобайт, что существенно ускорит процесс procedure GetFileAndOpenIt (var f : Text); ввода-вывода. При этом не так жестко будут эксплуатироваться головки дис- var ковода. Увеличение буфера должно произойти после связывания логического Buffer:array [1..16*1024] of Byte; {буфер} файла с физическим, но до первой операции ввода или вывода. Советуем FileName:string; {имя файла} взять за правило менять буфер до открытия файла. Это дает гарантию безо- begin пасности данных. Readln(FileName); {считывается имя файла} Задавая новый буфер, мы должны передать процедуре SetTextBuf не Assign(f, FileName); только логический файл f, но и переменную Buf, в которой этот буфер будет SetTextBuf(f, Buffer); {назначение буфера} расположен. Тип переменной Buf не имеет значения. Важен ее размер. Буфер Rewrite(f); {открытие файла f} end. 17 18
Страницы
- « первая
- ‹ предыдущая
- …
- 7
- 8
- 9
- 10
- 11
- …
- следующая ›
- последняя »