Прога\Скрипт

Discussion in 'Болталка' started by HeaVeNSeR, 21 Feb 2012.

  1. HeaVeNSeR

    HeaVeNSeR Member

    Joined:
    3 Dec 2008
    Messages:
    113
    Likes Received:
    7
    Reputations:
    1
    ...сколько я не искал в интернете готового решения,скольким кодерам не писал,никто норм справиться с задачей не смог...

    Ребят,в общем,есть 2 txt файла,
    в одном email:hash:salt (1.7 мил. строк)
    в другом просто hash (150 тысяч строк)

    надо вытащить из первого файла все строки с хэшами из второго...тоесть надо получить 150 тысяч email:hash:salt

    всё что мне предлагали,либо не работало,либо работало,но очень медленно...хотя задача-то довольно банальная...

    Возможно не в тот раздел форума отписал,но есть ли умельцы,кто сможет написать данный скрипт\прогу? :rolleyes: за $$
     
  2. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    тащемта придется сделать 255 миллиардов итераций
     
  3. Kaimi

    Kaimi Well-Known Member

    Joined:
    23 Aug 2007
    Messages:
    1,732
    Likes Received:
    809
    Reputations:
    231
    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;
    
     
    _________________________
  4. DJ4J

    DJ4J Member

    Joined:
    23 Aug 2009
    Messages:
    2
    Likes Received:
    53
    Reputations:
    1
    Быстрее работать не станет.Уже написали причину.
    Другие методы, кроме как каждый хеш проверять по всему списку или на каждую строку все 150к хешей, мне в голову не лезут.
     
  5. alias6969

    alias6969 Member

    Joined:
    3 Apr 2011
    Messages:
    27
    Likes Received:
    11
    Reputations:
    6
    На сколько я понимаю, hash здесь могут повторяться?
     
  6. HeaVeNSeR

    HeaVeNSeR Member

    Joined:
    3 Dec 2008
    Messages:
    113
    Likes Received:
    7
    Reputations:
    1
    спасибо,DJ4J
    спасибо,sn0w (узнал,что такое "итерация" :) )
    и спасибо,Kaimi... ;) ... как всегда поражаешь простотой и чёткостью своих решений :rolleyes: скрипт отработал за 5 секунд)
    ===========
    alias6969 да,дубли могут попадаться...
     
  7. \/ITA

    \/ITA Member

    Joined:
    21 Sep 2011
    Messages:
    25
    Likes Received:
    28
    Reputations:
    8
    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
     
    #7 \/ITA, 21 Feb 2012
    Last edited: 21 Feb 2012
  8. HeaVeNSeR

    HeaVeNSeR Member

    Joined:
    3 Dec 2008
    Messages:
    113
    Likes Received:
    7
    Reputations:
    1
    это Perl) давно читаю его блог,помню,что он предпочитает именно этот ЯП...
    но за альтернативу спасибо, \/ITA ... сохранил у себя ;)
     
  9. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    вообще больший выигрыш в скорости дала бы проекция исходных данных в память и работа с нею, а не построчное чтение. ну и нативный код конечно.
     
  10. DJ4J

    DJ4J Member

    Joined:
    23 Aug 2009
    Messages:
    2
    Likes Received:
    53
    Reputations:
    1
    Однако :)
    HeaVeNSeR Серьезно 5 секунд?
    Это Perl такой чудо-шустрый?
     
  11. \/ITA

    \/ITA Member

    Joined:
    21 Sep 2011
    Messages:
    25
    Likes Received:
    28
    Reputations:
    8
    так и есть, нужно все по минимуму, 2 чтения, 1 запись, сравнение в памяти
     
  12. HeaVeNSeR

    HeaVeNSeR Member

    Joined:
    3 Dec 2008
    Messages:
    113
    Likes Received:
    7
    Reputations:
    1
    \/ITA,sn0w не могу с вами поспорить :rolleyes: ..но скрипт отработал в считанные секунды,прирост,думаю,был бы "малоощутим" )
    DJ4J , +-2 секунды)
     
  13. sn0w

    sn0w Статус пользователя:

    Joined:
    26 Jul 2005
    Messages:
    1,021
    Likes Received:
    1,200
    Reputations:
    327
    хотя ради интереса приду домой,- проверю)
     
    #13 sn0w, 21 Feb 2012
    Last edited: 21 Feb 2012