Автор Тема: Проблемы с выводом контента в файл  (Прочитано 3775 раз)

0 Пользователей и 1 Гость просматривают эту тему.

Оффлайн /IE][A

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Привет Народ!!!!

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

P.S.  Используется ActivePerl 5.6.1 Build 628

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Проблемы с выводом контента в файл
« Ответ #1 : 26 Января 2004, 16:47:58 »
ключевые моменты скрипта + первые 5 строчек скрипта в студию плиз.
0 OK, 0:1

Оффлайн /IE][A

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с выводом контента в файл
« Ответ #2 : 27 Января 2004, 07:35:52 »
Цитировать
ключевые моменты скрипта + первые 5 строчек скрипта в студию плиз.

первые 5 строчек ничего конкретного не содержат.
вот ключевой момент:

   
foreach $filename (@names2){ # здесь массив файлов найденных в директории
      
$file_in="${directory}${dirname}\\\\\\\\$filename";
      
$file_out="output.txt";
      
open IN"< $file_inor die "Cannot open file $file_in $!";
      
open OUTFILE">> $file_outor die "Cannot open file $file_out $!";
      @
lines=<IN>; 
      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

  • Завсегдатай
  • Новичок
  • *
  • Сообщений: 36
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
Проблемы с выводом контента в файл
« Ответ #3 : 27 Января 2004, 07:56:38 »
Извините за беспокойство.
Все сделал.
файл для записи нужно было открыть сначала, а не после foreach

$file_out
="output.txt"
open OUTFILE">> $file_outor die "Cannot open file $file_out $!"

foreach 
$filename (@names2){ # здесь массив файлов найденных в директории 
   
$file_in="${directory}${dirname}\\\\$filename"
   
open IN"< $file_inor die "Cannot open file $file_in $!"
   . . . . . . . 
}
« Последнее редактирование: 27 Января 2004, 08:03:08 от /IE][A »

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Проблемы с выводом контента в файл
« Ответ #4 : 27 Января 2004, 09:12:15 »
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это.

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

3. если и дальше не будешь изпользовать в циклах локальные переменные споктнешся о множество камней.
0 OK, 0:1

Оффлайн vladsu

  • Фанат форума
  • Старожил
  • ****
  • Сообщений: 271
  • +0/-0
  • 0
    • Просмотр профиля
    • http://vladislavsurguchev.eu/
Проблемы с выводом контента в файл
« Ответ #5 : 27 Января 2004, 18:26:07 »
Цитировать
ondr:
1. Ссылки вида ${directory} лучше не использовать. Это небезопасно. use strict блокирует это


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

use strict;

my $directory = \'la\';

print "${directory}_la";
----------------------------------------------
Мой сайт чёрно-белых фотографий из разных уголков мира тут

Оффлайн ondr

  • Модератор
  • Глобальный модератор
  • Старожил
  • *****
  • Сообщений: 440
  • +0/-0
  • 0
    • Просмотр профиля
Проблемы с выводом контента в файл
« Ответ #6 : 27 Января 2004, 18:53:16 »
приношу свои извинения - перепутал

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

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

http://www.andrey.kaliningrad.fio.ru/p1.gif
0 OK, 0:1

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28