Шаг 34.
Доступ к файлу. Чтение информации из файла

    На этом шаге мы рассмотрим чтение информации из файла.

    Чтение информации из файла осуществляется операцией <>, операндом которой является дескриптор файла. В скалярном контексте при первом выполнении эта операция читает первую запись файла, устанавливая специальную переменную $., отслеживающую количество прочитанных записей, равной 1. Последующие обращения к операции чтения из файла с тем же дескриптором приводят к последовательному чтению следующих записей. В списковом контексте эта операция читает все оставшиеся записи файла и возвращает список, элементами которого являются записи файла. Разделитель записей хранится в специальной переменной $/, и по умолчанию им является символ новой строки "\n". Perl позволяет задать и другой разделитель записей обычной операцией присваивания переменной $/ нового символа разделителя записей. В следующем примере демонстрируются некоторые приемы чтения из файла.

#! perl -w
open(F1, "in.dat") or die "Ошибка открытия файла: $!";
open(F2, "out.dat") or die "Ошибка открытия файла: $!";
$line1 = <F1>; # Первая запись файла in.dat. 
print "$line1";
$line2 = <F1>; # Вторая запись файла in.dat.
print "$line2";
@rest = <F1>;  # Оставшиеся записи файла in.dat.
for($i=0;  $i<=$#rest;  $i++)    
   { print  "$rest[$i]";  }

$/=":";	#  Задание другого разделителя записей файла.
@f2  = <F2>;
print "\n";
# Печать  прочитанных  записей файла out.dat. 
for($i=0;  $i<=$#f2;  $i++)    
   { print  "$f2[$i]\n";  }
$/ = "\n"; # Восстановление умалчиваемого разделителя записей.
close(F1) or die $!; 
close(F2) or die $!;
open(F3, "out.dat") or die "Ошибка открытия файла: $!"; 
print <F3>;  # Печать всего файла. 
close(F3) or die $!;
Текст этого примера вместе с файлами можно взять здесь.

    Несколько комментариев к программе приведенного примера. В переменные $line1 и $line2 читаются соответственно первая и вторая строка файла in.dat, так как используется умалчиваемый разделитель записей "\n". Элементы массива @rest хранят строки с третьей по последнюю этого же файла: в операторе присваивания операция чтения <F1> выполняется в списковом контексте.

    Перед чтением записей файла out.dat устанавливается новый разделитель записей - символ ":". Если файл out.dat, например, содержит только одну строку

    111:   222:   333:   Конец

то элементы массива @f2 будут содержать следующие значения:

    $f2[0]   = "111:"
    $f2[l]   = "222:"
    $f2[2]   = "333:"
    $f2[3]   = "Конец"


    Замечание. Если при создании файла out.dat его единственная строка завершена переходом на новую строку (нажата клавиша Enter), то $f2[3] будет содержать строку "Конец\n".

    При достижении конца файла операция <> возвращает неопределенное значение, которое трактуется как Ложь. Это обстоятельство обычно используется для организации чтения записей файла в цикле:

    while($line  = <F1>)    
    {
        print  $line; #  Печать  очередной  строки  связанного
                         #  с дескриптором F1  файла.
    }

    На следующем шаге мы рассмотрим запись в файл.




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