Приглашаем посетить
Толстой (tolstoy-lit.ru)

Построчное чтение и запись данных

Построчное чтение и запись данных

Простейшим способом для чтения скриптом строки из файла служит использова­ние оператора <FILEHANDLE'>. В языке Perl указатель файла, окруженный тре­угольными скобками, становится символом ввода ( input - symbol ). Например, следующий фрагмент программы иллюстрирует использование символа ввода для чтения и вывода на экран содержимого файла Test . dat .

open(InFile, “Test.dat”) || die;

while ($line = <InFile>)

            {

                        print $ line ;                 # Выведет строку из файла

            }

close ( InFile );

Когда символ ввода достигает конца файла, он возвращает значение false , кото­рое в данном случае заканчивает выполнение цикла while .

Существует специальный (пустой) символ ввода, обозначаемый <>, который име­ет весьма специальное, но полезное применение. В первый раз, когда скрипт ис­пользует пустой символ ввода <>, он анализирует аргументы командной строки. Если строка @ ARGV является пустой, то входной символ <> читает из STDIN . Ес­ли вместо того @ARGV не пуста, то Perl открывает первый из файлов, указанных в переменной @ARGV, и читает содержимое файла. Когда Perl заканчивает обра­ботку одного файла, он приступает к следующему. После того как скрипт прочи­тал все файлы, символ <> возвращает значение false .

Скрипты языка Perl также могут использовать символ ввода для чтения всего со­держимого файла в массив так, что каждая строка файла становится элементом массива. Например, следующая инструкция читает из файла STDIN в массив @ lines :

@ lines = < STDIN >;

Запись данных в файл также достаточно проста. Фактически вы это делали вся­кий раз, когда использовали функцию print . Полный формат функции print имеет следующий вид:

           

            print [FileHandle]      List;

Если функция print не получает в качестве аргумента указателя файла, то она посылает вывод в STDOUT . Следующий фрагмент программы иллюстрирует ис­пользование функции print для добавления данных в выходной файл:

            open(LogFile, ‘>>logfile.dat’) || die;

            ##############

            ($m, $d, $y) = (localtime(time)) [4,3,5];

            print LogFile “Captain’s log, Stardate ++m$/$d/$y\n”;

            close ( LogFile );

Примечание: Указатель файла и выходной список не разделяются запятой.

Назад | Оглавление | Далее