ВУЗ:
Составители:
Рубрика:
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
- …
- следующая ›
- последняя »
