Forum Webscript.Ru
Программирование => Perl => Тема начата: /IE][A от 26 Января 2004, 16:42:53
-
Привет Народ!!!!
Может подскажите где у меня может быть ошибочка.
Короче тема такая.
Скрипт перебирает файлы в директории, открывает их вырезает нужные cтрочки и записывает их в файл.
Проблема:
При запуске все проходит нормально, все нужные элементы находит, (через принт проверял), но
1. в файл пишет по одному элементу из файла (после цикла), в этом случае он скорее всего пишет последний найденный элемент.
2. не пишет вообще (в теле цикла), при использовани die говорит Bad File Descriptor.
P.S. Используется ActivePerl 5.6.1 Build 628
-
ключевые моменты скрипта + первые 5 строчек скрипта в студию плиз.
-
ключевые моменты скрипта + первые 5 строчек скрипта в студию плиз.
первые 5 строчек ничего конкретного не содержат.
вот ключевой момент:
foreach $filename (@names2){ # здесь массив файлов найденных в директории
$file_in="${directory}${dirname}\\\\\\\\$filename";
$file_out="output.txt";
open IN, "< $file_in" or die "Cannot open file $file_in $!";
open OUTFILE, ">> $file_out" or die "Cannot open file $file_out $!";
@lines=;
foreach $line(@lines){
if($line =~ m/ищем заголовок/ic){
print "Found title\\n";
/*здесь все работает*/
/*дальше замена*/
$title = $line;
}
if($line =~ m/ищем нужные линки/ig){
print "Found link\\n";
/*здесь все работает*/
/*дальше замена*/
$content = $line;
# print OUTFILE "$title $content\\n";# or die "Cannot save: $!"; # это второй вариант (2)
}
# print OUTFILE "$title $content\\n";# or die "Cannot save: $!"; # это первый вариант (1)
close IN;
close OUTFILE;
}
}
вроде все
-
Извините за беспокойство.
Все сделал.
файл для записи нужно было открыть сначала, а не после foreach
$file_out="output.txt";
open OUTFILE, ">> $file_out" or die "Cannot open file $file_out $!";
foreach $filename (@names2){ # здесь массив файлов найденных в директории
$file_in="${directory}${dirname}\\\\$filename";
open IN, "< $file_in" or die "Cannot open file $file_in $!";
. . . . . . .
}
-
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это.
2. желательно всегда ипользовать use strict в своих скриптах, а на время отладки включать use warnings. Можно поступить еще жестче и включить use diagnostics (обязательно до strict\'а) и по каждой ошибке будет в лог писаться небольшой трактатик ;)
3. если и дальше не будешь изпользовать в циклах локальные переменные споктнешся о множество камней.
-
ondr:
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это
Можно по подробней, особенно про два последних предложения.
Линки вполне устроят.
Спасибо.
use strict;
my $directory = \'la\';
print "${directory}_la";
-
приношу свои извинения - перепутал
${directory} - интерпритатором воспринимается как $directory
блокироваться будет ${\'directory\'} (небезопасно, т.к. при этом легко запутаться)
http://www.andrey.kaliningrad.fio.ru/p1.gif