Forum Webscript.Ru

Программирование => Perl => Тема начата: /IE][A от 26 Января 2004, 16:42:53

Название: Проблемы с выводом контента в файл
Отправлено: /IE][A от 26 Января 2004, 16:42:53
Привет Народ!!!!

Может подскажите где у меня может быть ошибочка.
Короче тема такая.
Скрипт перебирает файлы в директории, открывает их вырезает нужные cтрочки и записывает их в файл.
Проблема:
При запуске все проходит нормально, все нужные элементы находит, (через принт проверял), но
1. в файл пишет по одному элементу из файла (после цикла), в этом случае он скорее всего пишет последний найденный элемент.
2. не пишет вообще (в теле цикла), при использовани die говорит Bad File Descriptor.

P.S.  Используется ActivePerl 5.6.1 Build 628
Название: Проблемы с выводом контента в файл
Отправлено: ondr от 26 Января 2004, 16:47:58
ключевые моменты скрипта + первые 5 строчек скрипта в студию плиз.
Название: Проблемы с выводом контента в файл
Отправлено: /IE][A от 27 Января 2004, 07:35:52
Цитировать
ключевые моменты скрипта + первые 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;  
      }
}

вроде все
Название: Проблемы с выводом контента в файл
Отправлено: /IE][A от 27 Января 2004, 07:56:38
Извините за беспокойство.
Все сделал.
файл для записи нужно было открыть сначала, а не после 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 $!";
   . . . . . . .
}
Название: Проблемы с выводом контента в файл
Отправлено: ondr от 27 Января 2004, 09:12:15
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это.

2. желательно всегда ипользовать use strict в своих скриптах, а на время отладки включать use warnings. Можно поступить еще жестче и включить use diagnostics (обязательно до strict\'а) и по каждой ошибке будет в лог писаться небольшой трактатик ;)

3. если и дальше не будешь изпользовать в циклах локальные переменные споктнешся о множество камней.
Название: Проблемы с выводом контента в файл
Отправлено: vladsu от 27 Января 2004, 18:26:07
Цитировать
ondr:
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это


Можно по подробней, особенно про два последних предложения.
Линки вполне устроят.
Спасибо.

use strict;

my $directory = \'la\';

print "${directory}_la";
Название: Проблемы с выводом контента в файл
Отправлено: ondr от 27 Января 2004, 18:53:16
приношу свои извинения - перепутал

${directory} - интерпритатором воспринимается как $directory

блокироваться будет ${\'directory\'} (небезопасно, т.к. при этом легко запутаться)

http://www.andrey.kaliningrad.fio.ru/p1.gif