Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
perl.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
388.1 Кб
Скачать

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

Простейшим способом для чтения скриптом строки из файла служит использование оператора <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);

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

Чтение и запись блоков данных

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

$result = sysread(FileHandle, $Var, Length[, Offset]);

$result = syswrite(FileHandle, $Var, Length[, Offset]);

Если в вызове функций указывается сдвиг от начала файла(Offset), то функции выполнят поиск места, с которого они начнутоперации ввода/вывода. Функции sysread и syswrite обе передаютданные, используя скалярную переменную строкового типа. Поскольку функции обрабатывают фиксированные блоки памяти, то данные могут содержать бинарные значения, включая нули и маркерыконца файла. Если в вызове функции указывается сдвиг от началафайла (Offset), то функция выполняет поиск места в файле, с которого начинает выполнять операции ввода/вывода. Если вы работаете с блоками данных, то скрипты могут такжеиспользовать следующие функции ввода/вывода:

$result = seek(FileHandle, Position, Base);

$result = tell(FileHandle);

$result = eof(FileHandle);

Функция seek работает в точности так же, как fseek - функция библиотеки времени выполнения языка С. Параметр Position задает позицию относительно начала отсчета, которая в свою очередьзадается параметром Base следующим образом:

? 0 Поиск от начала файлов

? 1 Поиск от текущей позиции

? 2 Поиск от конца файла

Функция tell языка Perl работает в точности так же, как фикция ftell библиотеки времени выполнения языка С. Эта функция возвращает текущую позицию в файле, с которой выполняются операциичтения или записи. Наконец, функция eof, так же как и функцияfeof языка С, возвращает значение <истинно> или <ложино>, которое скрипт может использовать для определения достижения концафайла.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]