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

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

  1. Digimortal

    Digimortal Banned

    Joined:
    22 Aug 2006
    Messages:
    471
    Likes Received:
    248
    Reputations:
    189
    на самом деле это называется PERL-golfing.. +)

    кста, вот мой вариант кода ; )..
    Code:
    /@rambler\.ru/i&&print for<>
    (заменять rambler на r(.+)r считаю "грязным хаком".. : ) )
     
    1 person likes this.
  2. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    Code:
    perl -ne "/r.r/&&print" mails.txt
    ну или как вышесказавший.. r(.+)r.ru.. все равно чистого кода в первом случае 12 символов, во втором - 16.. что в три раза меньше самого маленького, что предложил Tarigonik


    ЗЫ дижимортал опередил на несколько секунд)))) гг.. не видел

    + без грязного хака )))

    Code:
    perl -ne "/rambler.ru/&&print" mails.txt
    все равно чистого кода на несколько символов меньше чем у диджи))
     
    #22 darky, 12 Dec 2007
    Last edited: 12 Dec 2007
    1 person likes this.
  3. Tarigonik

    Tarigonik Member

    Joined:
    9 Dec 2007
    Messages:
    12
    Likes Received:
    8
    Reputations:
    0
    Незачет - слеш забыл перед собачкой ))
    А я так и написал - "жесткий твик" )
    Очень ненадежно, могут левые мыльники всплыть (как в логине, так и в домене) и модификатор i надо добавить
    Тоже самое - надо бы собаку добавить, а к ней и слеш + самое главное - модификатор i для разных регистров ;)
     
    #23 Tarigonik, 12 Dec 2007
    Last edited: 12 Dec 2007
    1 person likes this.
  4. darky

    darky ♠ ♦ ♣ ♥

    Joined:
    18 May 2006
    Messages:
    1,773
    Likes Received:
    825
    Reputations:
    1,418
    тогда оптимально будет что-то вроде

    Code:
    perl -ne "/\@r(.+?)r.r/i&&print" mails.txt
    есть еще варианты? :))
     
  5. Tarigonik

    Tarigonik Member

    Joined:
    9 Dec 2007
    Messages:
    12
    Likes Received:
    8
    Reputations:
    0
    Вариант есть, точнее исправление:
    perl -ne "/\@r(.+)r.r/i&&print" mails.txt
    Непонятно, зачем ты туда ? добавил. (.+) значит один или несколько символов, больше ниче не надо.



    blackybr: привычка :)
    думаю автор получил что хотел, да и мы померились размерами :) клозед
     
    #25 Tarigonik, 12 Dec 2007
    Last edited by a moderator: 12 Dec 2007
    1 person likes this.
  6. db_reader

    db_reader Member

    Joined:
    23 Jan 2008
    Messages:
    11
    Likes Received:
    23
    Reputations:
    0
    Извиняюсь за поднятую тему.

    Но если к примеру есть текстовый документ с мэйлами, такого формата:
    Возможно ли наоборот удалить с помощью скрипта всё, кроме мыла и ника, т.е. чтоб формат вышел такого вида:

    [email protected]::abbie

    Если есть возможность помочь, буду благодарен, т.к. в php не силён.
     
  7. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    <?php 
    $fp 
    fopen("mail.txt","rb"); 
    while (!
    feof ($fp))

        
    $out fgets($fr255);
        if(
    strpos($out'@') !== false)
        {
            
    $new_fp fopen("new_mail.txt","wb"); 
            
    fputs($new_fp$out);
        } 

    fclose($fp); 
    fclose($new_fp); 
    ?>
     
    1 person likes this.
  8. db_reader

    db_reader Member

    Joined:
    23 Jan 2008
    Messages:
    11
    Likes Received:
    23
    Reputations:
    0
    Isis -огромное спасибо, что откликнулся. Но при попытке пропарсить на локалхосте, выдаёт кучу ошибок
    Имя базы поставил такое же, mail.txt
    В чём может быть проблемма?
    0_o
     
    1 person likes this.
  9. banned

    banned Banned

    Joined:
    20 Nov 2006
    Messages:
    3,324
    Likes Received:
    1,193
    Reputations:
    252
    PHP:
    <?php 
    $fp 
    fopen("mail.txt","rb"); 
    while (!
    feof ($fp))

        
    $out fgets($fp255);
        if(
    strpos($out'@') !== false)
        {
            
    $new_fp fopen("new_mail.txt","wb"); 
            
    fputs($new_fp$out);
        } 

    fclose($fp); 
    fclose($new_fp); 
    ?> 
     
  10. db_reader

    db_reader Member

    Joined:
    23 Jan 2008
    Messages:
    11
    Likes Received:
    23
    Reputations:
    0
    Работает ! :)
    только выдирает по одной записи, начиная с последней :(. Если я из базы удаляю последнюю запись, то он записывает в файл предидущую.
    Но только одну. :(
     
  11. NOmeR1

    NOmeR1 Everybody lies

    Joined:
    2 Jun 2006
    Messages:
    1,068
    Likes Received:
    783
    Reputations:
    213
    PHP:
    <?php
        $old_file_name 
    'mails.txt';
        
    $new_file_name 'new_mails.txt';
        
    $new_array = array();
        foreach(
    explode("\n"file_get_contents($old_file_name)) as $string) {
            if(
    preg_match('~[A-Za-z0-9\._-]+@[A-Za-z0-9\._-]+::.+~'$string)) {
                
    $new_array[] = $string;
            }
        }
        
    $fopen fopen($new_file_name'a');
        
    fwrite($fopenimplode("\n"$new_array));
        
    fclose($fopen);
    ?>
    Не тестил
     
    3 people like this.
  12. db_reader

    db_reader Member

    Joined:
    23 Jan 2008
    Messages:
    11
    Likes Received:
    23
    Reputations:
    0
    Ай да красавчег! Работает! Спасибо огромнейшее! Спасибо всем, кто помогал.
     
  13. DRON-ANARCHY

    DRON-ANARCHY Отец порядка

    Joined:
    4 Mar 2005
    Messages:
    713
    Likes Received:
    142
    Reputations:
    50
    как-то php выглядит с одной стороны роднее, а с другой такой гигантизм прям по сравнению я перловкой)

    кстати, а че ежели сначала замутить
    strtolower($mails);
    а потом тупо выдергивать строки, в которых есть
    '@rambler.ru'

    по-моему будет проще регулярок. хотя хз
     
    #33 DRON-ANARCHY, 20 Feb 2008
    Last edited: 20 Feb 2008
    1 person likes this.
  14. Developer

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

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    PHP:
    <?php

    $file 
    file('mail.txt');

    foreach (
    $file as $mail) {
        if (
    strpos($mail'@rambler.ru') !== false) {
            echo 
    $mail;
        }
    }
     
  15. Developer

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

    Joined:
    3 May 2006
    Messages:
    152
    Likes Received:
    25
    Reputations:
    10
    Полная версия (с выводом в новый файл):

    PHP:
    <?php

    $file 
    file('in.txt');

    foreach (
    $file as $mail) {
        if (
    strpos($mail'@rambler.ru') !== false) {
            
    $out[] = $mail;
        }
    }

    $file fopen('out.txt''w');
    fputs($fileimplode(''$out));
    fclose($file);
     
    2 people like this.
  16. ThreeD

    ThreeD Banned

    Joined:
    25 Dec 2006
    Messages:
    128
    Likes Received:
    112
    Reputations:
    9
    Приветствую, прошу прощения, что апнул тему...
    В общем есть база вида:

    [email protected]::goodmorning

    что следует изменить в вышеприведённом коде, для отсеивания имен и составления списка чистых мыл, вида:

    [email protected]

    Или выложите плз рабочий кусок кода, т.к. в php не силён :(
    Заранее благодарен, с ув. ThreeD
     
  17. t00th

    t00th Banned

    Joined:
    15 Jul 2007
    Messages:
    37
    Likes Received:
    15
    Reputations:
    6
    open(IN,"mails.txt") || die "cant open file man!";
    while(<IN>) {
    print $1."@".$2,"\n" if /(\w+)\@(.*?)::(\w+)/;
    }
     
    1 person likes this.
  18. ThreeD

    ThreeD Banned

    Joined:
    25 Dec 2006
    Messages:
    128
    Likes Received:
    112
    Reputations:
    9
    Работает :) Забыл файл с мылами переименовать :)
    Спасибо +!
     
    #38 ThreeD, 9 Apr 2008
    Last edited: 9 Apr 2008
  19. t00th

    t00th Banned

    Joined:
    15 Jul 2007
    Messages:
    37
    Likes Received:
    15
    Reputations:
    6
    эээ...
    это Perl,если что
    У меня все работает,проверял
     
    1 person likes this.