В качестве текущей позиции дескриптора
В качестве текущей позиции дескриптора файла устанавливается заданная пользователем позиция. Параметр позиция задается в байтах, а параметр как-считать указывает, как его интерпретировать. Возможные значения:
0 — установить текущую позицию в значение позиция (отсчитываемое от начала файла)
1 — сдвинуть текущую позицию на указанное количество байтов (с начала или с конца файла в зависимости от знака позиции)
2 — установить текущую позицию в значение позиция, отсчитываемое от конца файла (значение параметра позиция должно быть отрицательным или нулевым)
Обратите внимание, что параметр как-считать обязателен.
Рассмотрим пример. Файл file.txt содержит текст:
This is the text.
С помощью следующей команды текущая позиция устанавливается на начало слова «text», а затем, начиная с этой позиции, выполняется операция чтения:
open (FILEHANDLE, "<file.txt")
or die ("Cannot open file file.txt");
seek FILEHANDLE, 12, 0;
while (<FILEHANDLE>) {
print;
}
close (FILEHANDLE);
text.
Функция seek часто используется с файлами, разбитыми на записи фиксированного размера. С ее помощью легко получить доступ к любой записи в файле (такой доступ называется прямым (random), в отличие от последовательного (sequential access), который требует считывать все промежуточные записи, прежде чем вы доберетесь до нужного места). Чтобы обслуживать записи постоянной длины (так как переменные Perl — обычно объекты переменной длины), можно использовать функции Perl pack, unpack, vec и ряд других.
tell — текущая позиция в файле
Функция tell возвращает значение текущей позиции в файле, отсчитываемое в байтах от начала файла:
tell дескриптор
tell
Если параметр дескриптор опущен, tell использует последний прочитанный файл. В следующем примере с помощью функции seek устанавливается позиция в файле, а затем tell сообщает ее значение:
open (FILEHANDLE, "<file.txt")
or die ("Cannot open file file.txt");
seek FILEHANDLE, 12, 0;
print tell FILEHANDLE;
Содержание Назад Вперед