The OpenNET Project / Index page

[ новости /+++ | форум | теги | ]

форумы  помощь  поиск  регистрация  майллист  ВХОД  слежка  RSS
"Как ускорить работу данного скрипта?"
Вариант для распечатки Архивированная нить - только для чтения! 
Пред. тема | След. тема 
Форумы Программирование под UNIX (Public)
Изначальное сообщение [Проследить за развитием треда]

"Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 25-Май-04, 12:59  (MSK)
Помогите пожалуйста ускорить работу данного скрипта, что-то он больно медленно работает :( В шит.вордс 40 линий, а файл на несколь сотен мегабайт. Если можно то сразу примером, поскольку я не силен в програмимровании :)

#!/usr/bin/perl -w

use strict;

my $ShitWordsFile = 'shit.words';

open (WORDS, "<$ShitWordsFile") or die "Can't open file '$ShitWordsFile': $!\n";
my @ShitWords = <WORDS>; chomp(@ShitWords);
close (WORDS);

open (FILE, "<$ARGV[0]") or die "Can't open file '$ARGV[0]': $!\n";
open (RESULT, ">$ARGV[0]_cleaned") or die "Can't open file '$ARGV[0]_cleaned': $!\n";

my ($InsertE, $EM);

while (<FILE>) {
    s/[\r\n\t]//g;
    if
(/^regexp here$/
or /second regexp here/)
{
        $InsertE = 1;
        $EM = $_;
        foreach (@ShitWords) {
            next if $_ eq '' or $_ eq ' ';
            if ($EM =~ /$_/i) {
                $InsertE = 0;
#               print STDERR "$EM filtered by rule '$_'\n";
            }
        }
        print RESULT "$EM\n" if $InsertE == 1;
    }
}

close (FILE);
close (RESULT);

  Рекомендовать в FAQ | Cообщить модератору | Наверх

 Оглавление

Индекс форумов | Темы | Пред. тема | След. тема
Сообщения по теме

1. "Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 01-Июн-04, 11:19  (MSK)
Ну что, неуж то никто не может помоч?
  Рекомендовать в FAQ | Cообщить модератору | Наверх

2. "Как ускорить работу данного скрипта?"
Сообщение от ACCA Искать по авторуВ закладки(??) on 02-Июн-04, 02:54  (MSK)
#!/usr/bin/perl -w
use strict;

my $ShitWordsFile = 'shit.words';

sub myfilter
{
   print STDERR "$1 filtered\n";
   return 'fuck';
}

open (WORDS, $ShitWordsFile) or die "$ShitWordsFile: $!\n";

my %words;
while (<WORDS>) {
  chomp;
  s/\s+//go;
  $words{lc $_} = 1 if ($_);
}

while (<>) {
    s/(\w+)/$words{lc $1} ? myfilter($_) : $1/ge;
    print $_;
}

Использовать:
filter.pl INFILE > OUTFILE или
filter.pl <INFILE >OUTFILE

  Рекомендовать в FAQ | Cообщить модератору | Наверх

3. "Как ускорить работу данного скрипта?"
Сообщение от ACCA Искать по авторуВ закладки(??) on 02-Июн-04, 02:59  (MSK)
Опечатка:

>    s/(\w+)/$words{lc $1} ? myfilter($_) : $1/ge;

следует читать:

s/(\w+)/$words{lc $1} ? myfilter($1) : $1/ge;

  Рекомендовать в FAQ | Cообщить модератору | Наверх

4. "Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 02-Июн-04, 03:52  (MSK)
Спасибо!

А куда встроить работу с regexp'ami?

Их два.


  Рекомендовать в FAQ | Cообщить модератору | Наверх

5. "Как ускорить работу данного скрипта?"
Сообщение от ACCA Искать по авторуВ закладки(??) on 02-Июн-04, 23:06  (MSK)
>А куда встроить работу с regexp'ami?

Перед s/


  Рекомендовать в FAQ | Cообщить модератору | Наверх

6. "Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 10-Июн-04, 04:33  (MSK)
А каким образом можно увеличить память отводимую скрипту? И можно ли вообще таким образом увелеичить производительность еще больше?

Да а еще вопрос, можно как-то выделить регексп так, чтоб допустим по регекспу у нас в линии есть правильное значение, но оно не записывается потому как в строке что-то неправильно. так вот, как омжно это самое правильное значение выдрать из строки ?

  Рекомендовать в FAQ | Cообщить модератору | Наверх

7. "Как ускорить работу данного скрипта?"
Сообщение от ACCA Искать по авторуВ закладки(??) on 10-Июн-04, 23:08  (MSK)
>А каким образом можно увеличить память отводимую скрипту? И можно ли вообще
>таким образом увелеичить производительность еще больше?

Много не выиграешь, хотя можно похимичить с перезапуском regexp (man perlop, ключ 'c' для m/ ) и сразу вставлять строку вместо вызова функции. Вообще какую скорость ты хочешь получить? Может оказаться, что нужно переписать всё на C.


>Да а еще вопрос, можно как-то выделить регексп так, чтоб допустим по
>регекспу у нас в линии есть правильное значение, но оно не
[...]

Понятнее не стало. Объясни словами, что ты ищешь и что хочешь получить.

  Рекомендовать в FAQ | Cообщить модератору | Наверх

8. "Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 17-Июн-04, 20:58  (MSK)
Я хочу очень быструю утилиту.. так как перл слишком долго обрабатывает гиговый файл :(
  Рекомендовать в FAQ | Cообщить модератору | Наверх

9. "Как ускорить работу данного скрипта?"
Сообщение от Kaufcen emailИскать по авторуВ закладки on 28-Июл-04, 08:19  (MSK)
#!/usr/bin/perl -w
use strict;
my $ShitWordsFile = 'shit.words';

sub myfilter
{
   print STDERR "$1 filtered\n";
   return 'fuck';
}

open (WORDS, $ShitWordsFile) or die "$ShitWordsFile: $!\n";

my %words;
while (<WORDS>) {
  chomp;
  s/\s+//go;
  $words{lc $_} = 1 if ($_);
}

while (<>) {
    s/(\w+)/$words{lc $1} ? myfilter($_) : $1/ge;
    print $_;
}


Использовать:
filter.pl INFILE > OUTFILE или
filter.pl <INFILE >OUTFILE


Блин, вот сейчас только обнаружил, что когда фильтрует по списку слов, и слово найдено которое в листе каких слов не должно быть, она его просто заменяет на "fuck" , когда его нужно удалять :\
Помогите кто-нибудь?

  Рекомендовать в FAQ | Cообщить модератору | Наверх


Удалить

Индекс форумов | Темы | Пред. тема | След. тема
Пожалуйста, прежде чем написать сообщение, ознакомьтесь с данными рекомендациями.




Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2025 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру