#! perl -w open(F1, "in.dat") or die "Ошибка открытия файла: $!"; open(F2, "out.dat") or die "Ошибка открытия файла: $!"; $line1 = <F1>; # Первая запись файла in.dat $line2 = <F1>; # Вторая запись файла in.dat @rest = <F1>; # Оставшиеся записи файла in.flat $/ = ">"; # Задание другого разделителя записей @f2 = <F2>; # Печать прочитанных записей файла out.dat for($i=0; $i<=$#f2; $i++) { print "Запись ".($i+1).": $f2[$i]\n"; } $/ = "\n"; # Восстановление разделителя по умолчании close(Fl) or die $!; close(F2) or die $!; open(F3, "out.dat") or die "Ошибка открытия файла: $!"; print <F3>; # Печать всего файла close(F3) or die $!;
Иванов> Петров> Сидоров> Конецто элементы массива @f2 будут содержать следующие значения:
$f2[0] = "Иванов>" $f2[l] = "Петров>" $f2[2] = "Сидоров>" $f2[3] = "Конец"
print "Запись:".<F3>;то получили бы распечатку только первой строки файла, так как в этом случае операция <F3> будет выполняться в скалярном контексте, создаваемом операцией конкатенации строк ( . ). Чтобы получить требуемый результат, следовало бы воспользоваться циклом while:
while(<F3>) { print "Запись: ".$_; # Печать очередной строки связанного # с дескриптором F3 файла }
readline *ДЕСКРИПТОР;
$line = <STDIN>; $line = readline *STDIN;
print ДЕСКРИПТОР СПИСОК_ВЫВОДА;
# Явное задание разделителя записей print F1 @recl1, "\n"; $\ = "\n"; # Установка разделителя записей # Теперь разделитель записей будет выводиться неявно # каждой следующей функцией print print F1 @rесl2;
$var1 = "11111"; Svar2 = "22222"; print $var1, $var2, "\n"; $, = " "; print $var1, $var2, "\n";Первый оператор print напечатает:
1111122222Тогда как при выполнении второго оператора print мы получим строку:
11111 22222
# Сохранение текущего дескриптора по умолчанию и назначение # F1 новым умалчиваемым дескриптором $oldfilehandle = select(Fl); # Вывод в файл, ассоциированный с дескриптором Fl print $line; # Восстановление старого дескриптора по умолчанию select($oldfilehandle); # Вывод в файл, ассоциированный со старым дескриптором print $line;
seek ДЕСКРИПТОР, СМЕЩЕНИЕ, ТОЧКА__ОТСЧЁТА;
use IO::Seekable: seek FILE1, 5, 0; seek FILE2, 5, SEEK_SET;
seek FILE1, 0, 0; # Переход в начало файла seek FILE1, 0, 2; # Переход в конец файла
getc; # Чтение символа из STDIN getc F1; # Чтение символа в текущей позиции файла с # дескриптором F1
read ДЕСКРИПТОР, ПЕРЕМЕННАЯ, ДЛИНА [,СМЕЩЕНИЕ];
******** * PERL * ********
#! perl -w open(F1, "in.dat") or die "Ошибка открытия файла: $!"; $str = "1234567890"; read F1, $str, 9; # Чтение девяти байтов в # переменную $str без смещения print $str,"\n"; # $str = "********\n" read F1, $str, 8, length($str); print $str,"\n"; # $str - "*******\n* PERL *"
sysread ДЕСКРИПТОР, ПЕРЕМЕННАЯ, ДЛИНА [,СМЕЩЕНИЕ]; syswrite ДЕСКРИПТОР, ПЕРЕМЕННАЯ, ДЛИНА [,СМЕЩЕНИЕ];
sysseek ДЕСКРИПТОР, СМЕЩЕНИЕ, ТОЧКА_ОТСЧЕТА;
$position = sysseek Fl, 0, 1; # Текущая позиция указателя файла
#! perl -w use Fcntl; # Открытие файла в режиме чтение/запись sysopen F1, "in.dat", O_RDWR; # Чтение блока в 14 байтов $read = sysread F1, $string, 14; warn "Прочитано $read байтов вместо 14\n" if $read != 14; # Установка текущей позиции (на 15 байтов) $position = sysseek Fl, 0, 1; die "Ошибка позиционирования: $!\n" unless defined $position; # Запись строки в текущей позиции $string = "Новое Значение"; $written = syswrite F1, $string, length($string); die "Ошибка записи: $!\n" if $written != length($string); # Закрытие файла close F1 or die $!;
Следующая страница | Содержание главы |
Нет комментариев. Оставить комментарий: |