Парсер Txt файла

Discussion in 'PHP' started by Xszz, 12 Dec 2007.

  1. Xszz

    Xszz Elder - Старейшина

    Joined:
    23 Apr 2007
    Messages:
    141
    Likes Received:
    42
    Reputations:
    9
    Доброго времени суток .
    если у кого есть минутка , напишите плиз парсер который будет парсить текстовый файл вида :
    И удалять все поля кроме рамблера .
    Спасибо.
     
  2. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    open(FILE, '<incom.txt');
    while(<FILE>) {
    print $_ if $_ =~ /rambler/;
    }

    юзать C:\>pars.pl > выходной файл
     
    2 people like this.
  3. Xszz

    Xszz Elder - Старейшина

    Joined:
    23 Apr 2007
    Messages:
    141
    Likes Received:
    42
    Reputations:
    9
    Спасибо огромное
     
  4. vp$

    vp$ Elder - Старейшина

    Joined:
    22 Oct 2007
    Messages:
    65
    Likes Received:
    68
    Reputations:
    19
    PHP:
    <?php
    @set_time_limit(0);
    $ft fopen ("list.txt""r");
     while (!
    feof($ft))
       { 
    $str trim(fgets($ft100));
          if (
    strpos($str,'@rambler.ru')>0)
            {
              
    $fd fopen ("rambler.txt""a+");
                
    fwrite ($fd$str);
                
    fwrite ($fd"\n");
                
    fclose ($fd);
            }
       }
        
    fclose ($ft);
    ?>
     
    1 person likes this.
  5. ENFIX

    ENFIX Elder - Старейшина

    Joined:
    6 Jun 2006
    Messages:
    175
    Likes Received:
    122
    Reputations:
    75
    PHP:
    $fd fopen ("rambler.txt""a+"); 
                
    fwrite ($fd$str); 
                
    fwrite ($fd"\n"); 
                
    fclose ($fd);
    Не думаю, что есть гуд открывать и закрывать файл внутри цикла.

    Имхо перл в самый раз, а пшп тут, так скажем, отсасывает
     
    2 people like this.
  6. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    *лучше использовать строковое равно
    Code:
    #!perl
    use strict;
    use warnings;
    my $file = shift||exit print "usage : $0 <file>";
    open( my $F, '<',$file)|| exit print $!;
    while( <$F> )
    {
        $_=~/\@(\w+)/;
        print $_  if $1 [COLOR=DarkOrange][B]eq[/B][/COLOR] 'rambler';
    } 
     
    1 person likes this.
  7. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Хм...не обязательно :)....это не тупое сравнение, это сравнение по шаблону ( =~ )
    В твоем варианте лишний гемор с регекспом ))))
    И еще хорошо было бы модификаторы io поставить в шаблоне :))

    ЗЫЖ А то сталкивался с любителями писать мыла а-ля (@Rambler.Ru @RAMBLER.RU итд) ))))
    ЗЗЫЖ В примере C!klodoL будет еще ловить мыла а-ля *rambler*@somehost.com.... лучше будет в шаблоне юзать что-нибудь типа \@rambler.ru
    Ну это так, если уже по коду пошли )
     
    #7 biophreak, 12 Dec 2007
    Last edited: 12 Dec 2007
  8. demonoid

    demonoid Banned

    Joined:
    12 Jan 2007
    Messages:
    101
    Likes Received:
    111
    Reputations:
    27
    Смотрим примеры которые дал ТС :D
    Теперь в парсер который написал C!klodoL
    положим мыло [email protected]
    biophreak прикольно отредактировал не успел я ответ написать .
    Еще раз повторяю ориентируемся на примеры ТС
     
    #8 demonoid, 12 Dec 2007
    Last edited: 12 Dec 2007
    1 person likes this.
  9. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Добавляем ровно 4 символа в пример C!klodoL =)) :

    open(FILE, '<incom.txt');
    while(<FILE>) {
    print $_ if $_ =~ /\@rambler/io;
    }

    Вуаля :))))

    Ну примеры, он видимо тут и придумывал, а ктож знает какая там у него база мыл.... :)))))
     
  10. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    но тогда может попасть мыло типа @rambler.com 8)
    если уж совсем точно то;
    open(FILE, '<incom.txt');
    while(<FILE>) {
    print $_ if $_ =~ /\@rambler\.ru/i;
    }
     
    #10 C!klodoL, 12 Dec 2007
    Last edited: 12 Dec 2007
  11. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    ну да :) а еще .info .org .mobi и так далее )))))
     
  12. Tarigonik

    Tarigonik Member

    Joined:
    9 Dec 2007
    Messages:
    12
    Likes Received:
    8
    Reputations:
    0
    А теперь делаем оптимизацию и убираем 9 лишних символов )))

    open(FILE, '<incom.txt');
    while(<FILE>) {
    print if /\@rambler\.ru/i;
    }
     
    1 person likes this.
  13. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Ну и если совсем упростить и минимизировать :)))))

    open(F, 'incom.txt'); while(<F>){ print if /\@rambler.ru/i }

    :D
     
    #13 biophreak, 12 Dec 2007
    Last edited: 12 Dec 2007
  14. Tarigonik

    Tarigonik Member

    Joined:
    9 Dec 2007
    Messages:
    12
    Likes Received:
    8
    Reputations:
    0
    Я специально не стал стал изменять имена дескриптора и файлов, перевод строк и тд, но раз уж на то пошло:
    open(F,'i');while(<F>){print if /\@rambler.ru/i}
     
    1 person likes this.
  15. biophreak

    biophreak Elder - Старейшина

    Joined:
    3 Aug 2007
    Messages:
    348
    Likes Received:
    63
    Reputations:
    15
    Добавлю отдельный твик :)))

    while(<>){ print if /\@rambler.ru/i }

    Юзать как file.pl file_with_mails.txt
    Жду ответа :))))
    ))))
     
    1 person likes this.
  16. scrat

    scrat кодер

    Joined:
    8 Apr 2007
    Messages:
    625
    Likes Received:
    541
    Reputations:
    3
    PHP:
    <?php
    $f
    =file("мыльники.txt");
    for(
    $i=0;$i<count($f);$i++) strpos($f[$i],"rambler") ? echo $f[$i] : continue;
    ?>
     
  17. nerezus

    nerezus Banned

    Joined:
    12 Aug 2004
    Messages:
    3,191
    Likes Received:
    729
    Reputations:
    266
    "оптимизация на размер исходника" - мне фраза кажется глупой ;)
     
  18. C!klodoL

    C!klodoL Elder - Старейшина

    Joined:
    5 Jun 2007
    Messages:
    302
    Likes Received:
    208
    Reputations:
    4
    #18 C!klodoL, 12 Dec 2007
    Last edited: 12 Dec 2007
    1 person likes this.
  19. Tarigonik

    Tarigonik Member

    Joined:
    9 Dec 2007
    Messages:
    12
    Likes Received:
    8
    Reputations:
    0
    Вариант 1
    Могу только пробелы убрать )
    while(<>){print if /\@rambler.ru/i}
    И запускать как f.pl i ))

    Вариант 2 аka жесткий твик =)
    while(<>){print if /\@r(.+)r.ru/i}
    Выгода - 1 символ ))
    Лично я не знаю подобного почтовика кроме рамблера

    nerezus, да мы просто балуемся (или если хочешь - меряемся письками :)
     
    1 person likes this.
  20. Scipio

    Scipio Well-Known Member

    Joined:
    2 Nov 2006
    Messages:
    733
    Likes Received:
    544
    Reputations:
    190
    PHP:
    <?php 
    error_reporting
    (E_ALL); 
    set_time_limit(0); 
    $fr=fopen("mail.txt","r"); 
    $fw=fopen("rambler.txt","w"); 
    while (!
    feof ($fr)) { 
        
    $buffer fgets($fr,255); 
        
    $buffer strtolower($buffer); 
        
    $log=explode('@',$buffer,2); 
        
    $log[1]=trim($log[1]);
      if (
    $log[1]=='rambler.ru'fputs($fw,$buffer); 
      

    echo 
    "OK!"
    fclose($fr); 
    fclose($fw); 
    ?>

    как мне написали explode() не рулит, лучше strpos...

    это так, просто скрипт брал из этого:
    http://forum.antichat.ru/thread54946.html

    strpos рулит не всегда кстати
     
    #20 Scipio, 12 Dec 2007
    Last edited: 12 Dec 2007
    1 person likes this.