Xpoint
   [напомнить пароль]

помогите чуть оптимизировать скорость выполнения

Метки: [без меток]
2008-05-21 20:55:22 [обр] nestandart[досье]
сообщение промодерировано

скрипт должен во всех файлах дирректории заменить форму ввода сообщения

<form...> (тут может быть что угодно включая переводы строк и проч) </form>

на

<startform></endform>

(что бы в случае чего в будущем знать, где форма была.)
(алгоритм скрипта:
по всем файлам папки :: открываем-читаем-закрываем файл, ищем-правим совпадение, открываем-пишем-закрываем файл.)

вся затея для уменьшения занимаемого объёма.

но, то ли количество файлов всё же великовато (пару сотен), то ли код не оптимальный, работает как то долго (до пары минут). в принцыпе и так жить можно, скрипт вызывается вручную и только "единыжды" для конвертации.
Из спортивного интереса, как всё это дело ускорить ?

хостинг - windows.

код:

print "Content-Type: text/html\n\n";
print "<hr>";
############## TEST
$number=100;
complette_listing($number);

print "OK!";
exit;

sub complette_listing {
      my ($dir_2_open)=@_;
      $dir_2_open=$forum_patch.$dir_2_open."/messages/";
      opendir(DIR,$dir_2_open) or (warn "Can't open to read <i>$dir</i>: $!" and return 0);
      my @files=readdir(DIR);
      closedir(DIR);
      foreach (@files){
            next if /^\.\.?$/;
            next if -d "$dir_2_open$_";
            print $dir_2_open."$_ <br>";
            $fil_for_convert="$dir_2_open$_";
            convert_file($fil_for_convert);
            }
      }

sub convert_file {
      my ($fil_2_convert)=@_;
      open (OLD_FILE,"$fil_2_convert");
      @linest_2_convert=<OLD_FILE>;
      close(OLD_FILE);
      $lines = "@linest_2_convert";
      $lines =~ s|<form.*?</form>\n?|<startform><\/endform>\n|s;
      open (NEW_FILE,">$fil_2_convert");
      print NEW_FILE $lines;
      close(NEW_FILE);
      }
спустя 11 часов [обр] Роман Чемисов(56/327)[досье]
спустя 3 часа 7 минут [обр] Алексей Севрюков(198/1280)[досье]
М Перенесено из форума "Программирование::Perl::Разное"
спустя 8 дней [обр] Green(3/6)[досье]
убрать второе открытие файла
добавить параметр g у регулярного выражения, у Вас может быть несколько форм
добавить параметр i у регулярного выражения, у Вас может быть <FORM...</FORM>
если у Вас нет в файле формы, зачем его вообще переписывать?
open (FILE,'+<',$fil_2_convert);
my $lines = '';
while(!eof FILE)
{
    $lines .= <FILE>;
}
my $old_size = length $lines;
$lines =~ s|<form.*?</form>\n?|<startform><\/endform>\n|gis;
if($old_size != length $lines)
{
    seek FILE, 0, 0;
    print FILE $lines;
    truncate FILE, length $lines;
}
close FILE;
Powered by POEM™ Engine Copyright © 2002-2005