...сколько я не искал в интернете готового решения,скольким кодерам не писал,никто норм справиться с задачей не смог... Ребят,в общем,есть 2 txt файла, в одном email:hash:salt (1.7 мил. строк) в другом просто hash (150 тысяч строк) надо вытащить из первого файла все строки с хэшами из второго...тоесть надо получить 150 тысяч email:hash:salt всё что мне предлагали,либо не работало,либо работало,но очень медленно...хотя задача-то довольно банальная... Возможно не в тот раздел форума отписал,но есть ли умельцы,кто сможет написать данный скрипт\прогу? за $$
Code: my $file1 = 'email_hash_salt.txt'; my $file2 = 'hash.txt'; my $file3 = 'result.txt'; open A, '<', $file2 or die $!; my %hash = map {s/[^\w]//g && $_ => 1} <A>; close A; open A, '<', $file1 or die $!; open B, '>>', $file3 or die $!; while(<A>) { if($_ =~ /^.+?:(.+?):/) { print B $_ if $hash{$1}; } } close A; close B;
Быстрее работать не станет.Уже написали причину. Другие методы, кроме как каждый хеш проверять по всему списку или на каждую строку все 150к хешей, мне в голову не лезут.
спасибо,DJ4J спасибо,sn0w (узнал,что такое "итерация" ) и спасибо,Kaimi... ... как всегда поражаешь простотой и чёткостью своих решений скрипт отработал за 5 секунд) =========== alias6969 да,дубли могут попадаться...
Kaimi, не написал какой интерпретатор... или так: Code: OpenFile(0,"email_hash_salt.txt") OpenFile(1,"hash.txt") OpenFile(2,"result.txt") Dim hash.s(0) Repeat ReDim hash(ArraySize(hash())+1) hash(ArraySize(hash()))=ReadString(1) Until Eof(1) Repeat ehs.s=ReadString(0) For i=1 To ArraySize(hash()) If StringField(ehs,2,":") = hash(i) WriteStringN(2,ehs) EndIf Next i Until Eof(0) Интерпретатор: PureBasic Компил: Скачать файл 111.exe
это Perl) давно читаю его блог,помню,что он предпочитает именно этот ЯП... но за альтернативу спасибо, \/ITA ... сохранил у себя
вообще больший выигрыш в скорости дала бы проекция исходных данных в память и работа с нею, а не построчное чтение. ну и нативный код конечно.
\/ITA,sn0w не могу с вами поспорить ..но скрипт отработал в считанные секунды,прирост,думаю,был бы "малоощутим" ) DJ4J , +-2 секунды)