Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сравнение хешей 
:(
    Опции темы
warlock000
Дата 26.8.2011, 09:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.8.2011

Репутация: нет
Всего: нет



Привет всем, собственно проблема в следующем, есть некий текст типа:

Бла бла бла бо бо бо буб бу бу 123456789
Бу бу ба бе бу бр кр мр фр 123456789 000111222 5454654165
ла ла ла тра та та ту ту ту 987654321
Бла бла бла бо бо бо буб бу бу 123456789 987654321 000111222 5454654165
Бла бла бла бо бо бо буб бу бу 123456789 000111222
итд

Из этого текста нужно взять все числовые значение и сравнить их, тоесть если 123456789 в тексте встречается более 5 раз все строки удаляются, в принцыпе это всё решается регуляркой s/123456789{5,100}//g; но мне нужно сравнить все числа с каждой с этой регуляркой, вчера почитал про хэши но так толком нивчем и не разобрался, если не трудно выложите пример сравнения.

З.Ы. Условия должны быть такими, если числа совпадают более 5 раз тогда происходит удаление всех чисел в тексте, и если происходит удоление число это пишется в лог. Заранее благодарен

З.З.Ы. Тема отсюда http://forum.vingrad.ru/forum/act-ST/f-183...4/unread-1.html, так как ошибся разделом...
PM MAIL   Вверх
warlock000
Дата 26.8.2011, 10:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.8.2011

Репутация: нет
Всего: нет



Есть даже скрипт примерно:

Код

#!c:\usr\bin\perl.exe
open(IN, "< data.txt") or die "Can't open file: $!";
open(OUT, "+> dataclean.dat") or die "Can't open file out.txt for writing: $!";
@input = <IN>;
close(IN);
%seen = ();

foreach $item (@input)
{
$item =~ s/123456789{5,100}//g;
print OUT $item;
}
close(OUT);


но не понимаю как эту лебуду прикрутить к хешам и сравнивать перебором с регуляркой.... smile  в теории должен быть цыкл который будет подставлять каждую строку в легулярку и она уже будет обрабатывать весь хэш

З.Ы. В перле я ещё новичок и только начинаю немного кодить, пожалуйста помогите))  smile 


Это сообщение отредактировал(а) warlock000 - 26.8.2011, 10:05
PM MAIL   Вверх
alezzz
Дата 26.8.2011, 10:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



Если файл легко помещается в памяти то там его и держите в виде массива строк, как я понял имеенно строки и надо удалять, хотя тоже не все понятно, в строках встречается несколько чисел, как быть с теми, которые не повторяются больше 5 раз. 
Пройдитесь по всему файлу и соберите хеш чисел, регуляркой /\d+/ найдите числа, в хеше держите счетчик и массив с номерами строк где встречаются числа. После этого для чисел у которых счетчик больше 5 удаляйте из файла строки.
В любом случае регулярка вида s/123456789{5,100}//g явно не подойдет.
PM MAIL   Вверх
warlock000
Дата 26.8.2011, 10:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.8.2011

Репутация: нет
Всего: нет



Цитата(alezzz @  26.8.2011,  10:15 Найти цитируемый пост)
Если файл легко помещается в памяти то там его и держите в виде массива строк, как я понял имеенно строки и надо удалять, хотя тоже не все понятно, в строках встречается несколько чисел, как быть с теми, которые не повторяются больше 5 раз. 
Пройдитесь по всему файлу и соберите хеш чисел, регуляркой /\d+/ найдите числа, в хеше держите счетчик и массив с номерами строк где встречаются числа. После этого для чисел у которых счетчик больше 5 удаляйте из файла строки.
В любом случае регулярка вида s/123456789{5,100}//g явно не подойдет. 


А немогли бы вы написать небольшой примерчик как это будет выглядить, понять то я понял что вы написали а вот модефицировать скрипт не получится так как знаний нехватает((

Если повторов меньше 5 то они остаются, если больше то удаляются все строки, причем тут просто /\d+/ не обойтись, потому что в строке могут встречатся еще двех / 3х значные числа, типа: текст текст 25,5текст текст  145 текст 123456789 987654321; текст текст 3/5*7 текст текст 11,1 текст  123456789

Это сообщение отредактировал(а) warlock000 - 26.8.2011, 10:27
PM MAIL   Вверх
alezzz
Дата 26.8.2011, 11:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


сплю...
**


Профиль
Группа: Участник
Сообщений: 499
Регистрация: 17.8.2009

Репутация: 1
Всего: 14



я так понял что числа из 2-3 знаков не считаются?
Код

...
@input = <IN>;
...
my %count;
my %lines;

for (my $line = 0; $line<=$#input; $line++){
    while ($input[$line] =~ /\d{5,}/g){
        $count{$&}++;
        push (@{$lines{$&}}, $line) if not grep (/$line/, @{$lines{$&}});
    }
}

foreach my $num (keys %count){
    if ($count{$num} > 4){
        foreach my $line (@{$lines{$num}}){
            delete $input[$line];
        }
    }
}


Это сообщение отредактировал(а) alezzz - 26.8.2011, 11:42
PM MAIL   Вверх
warlock000
Дата 26.8.2011, 11:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 43
Регистрация: 2.8.2011

Репутация: нет
Всего: нет



Огромное спасибо, вы очень помогли!

Это сообщение отредактировал(а) warlock000 - 26.8.2011, 16:37
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl"
korob2001
sharq
  • В этом разделе обсуждаются общие вопросы по языку Perl
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Если ваш вопрос относится к CGI программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", можно скачать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0439 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.