Шаг 37.
Доступ к файлу. Функции getc(), read() и length()

    На этом шаге мы рассмотрим функции getc(), read() и length().

    Кроме операции чтения записей файла <>, Perl предоставляет еще два способа чтения информации из файла: функции getc() и read(). Первая читает один байт из файла, тогда как вторая читает записи фиксированной длины.

    Функция getc() возвращает символ в текущей позиции файла, дескриптор которого передан ей в качестве параметра, или неопределенное значение в случае достижения конца файла или возникновении ошибки. Если функция вызывается без параметра, то она читает символ из стандартного файла ввода STDIN.

    getc;     # Чтение символа из STDIN.
    getc F1;  # Чтение символа в текущей позиции файла с дескриптором F1.

    Функции read() передаются три или четыре параметра и ее синтаксис имеет вид:

    read ДЕСКРИПТОР, ПЕРЕМЕННАЯ, ДЛИНА [,СМЕЩЕНИЕ];

    Она читает количество байтов, определенное значением параметра ДЛИНА, в скалярную переменную, определяемую параметром ПЕРЕМЕННАЯ, из файла с дескриптором, заданным первым параметром ДЕСКРИПТОР. Возвращаемое значение - действительное количество прочитанных байтов, 0 - при попытке чтения в позиции конца файла и неопределенное значение в случае возникновения ошибки. Параметр СМЕЩЕНИЕ определяет количество сохраняемых байтов из содержимого переменной ПЕРЕМЕННАЯ, т.е. запись прочитанных из файла данных будет добавлена к содержимому переменной после байта, определяемого значением параметра СМЕЩЕНИЕ. Отрицательное, значение смещения -n (n - целое число) означает, что из содержимого переменной ПЕРЕМЕННАЯ отбрасываются последние n байтов и к оставшейся строке добавляется запись, прочитанная из файла. Следующий пример демонстрирует чтение записей фиксированной длины в предположении, что файл in.dat содержит три строки данных: One Two Three.

#! perl -w
open(F1, "in.dat") or die "Ошибка открытия файла: $!";
$string = "1234567890";
read F1, $string, 6;	# Чтение шести байт в переменную без смещения.
print $string,"\n";	# $string = "One\nTw"
read F1, $string, 6, length($string);
print $string,"\n";	# $string = "One\nTwo\nThre"
Текст этого примера можно взять здесь.

    Функция length() возвращает количество символов (байтов) в строковых данных, хранящихся в скалярной переменной, переданной ей в качестве параметра. После выполнения первой операции чтения содержимое переменной $string было уничтожено, так как эта функция read() вызывалась без смещения. Тогда как при втором чтении хранившиеся данные в переменной $string были полностью сохранены.

    На следующем шаге мы рассмотрим организацию небуферизованного ввода/вывода.




Предыдущий шаг Содержание Следующий шаг