Вытащить определенные фрагменты из txt

Discussion in 'Болталка' started by sultan128, 6 May 2010.

  1. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    Есть текстовый файл, предполжим такого вида:
    "...Параметр -savehelps заставляет сохранить файл helps.txt. Фрагмент файла ROM=KJF5IDJGJ для иллюстрации: ... #RACE хранит шаблон, по которому создаются мобы определенной ROM=2JL7JVS9GJ разновидности (расы, вида и т.п.). ..."
    Как вытащить то, что находится после "ROM=" в отдельный файл? чтобы на выходе был txt, содержий в себе:
    KJF5IDJGJ
    2JL7JVS9GJ
    .............
     
  2. zer0day

    zer0day Banned

    Joined:
    2 May 2010
    Messages:
    0
    Likes Received:
    0
    Reputations:
    0
    Такая штука парсер называется
     
  3. Kusto

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

    Joined:
    4 Feb 2007
    Messages:
    886
    Likes Received:
    678
    Reputations:
    510
    Проверь (мне лень)
    PHP:
    <?php
     
    $text 
    =file_get_contents('txt.txt');  
    preg_match_all("#ROM=(.*)#iU",$text$out );
    $result $out[1];   
    foreach(
    $result as $value)   
      {   
         echo 
    "$value <br />";  
        
    flush(); 
      }  

    ?>
    Правда вывод не в файл сделал а на экран...если что- сам допишеш пару строчек сохранения файла ...

    P.S. :D запостил бы в тематическом разделе в вопросах, получил бы на том ЯП который тебе ближе- а так мучайся- выбирай из этих вариантов что тебе предложили :D
     
    #3 Kusto, 6 May 2010
    Last edited: 6 May 2010
  4. Fepsis

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

    Joined:
    17 Sep 2008
    Messages:
    791
    Likes Received:
    391
    Reputations:
    72
    Code:
    #!/usr/local/bin/perl
    
    open(F, 'in.txt'); 
    $f = join('', <F>);
    close(F);
    
    @ar = $f =~ /ROM=(.+?)\s/g;
    
    open(OUT, '>> oit.txt');
    
    foreach (@ar)
       {
    	print OUT "$_\n";
       }
    
    close(OUT);
     
  5. lukmus

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

    Joined:
    18 Nov 2009
    Messages:
    366
    Likes Received:
    115
    Reputations:
    23
    это на руби, не тестировалось
    Code:
    infl=File.new("infile.txt","rb")
    outfl=File.new("outfile.txt","a")
    while !infl.eof do   outfl.puts infl.gets.chop.split("ROM=")[1] end
    outfl.close
    infl.close
    
     
    #5 lukmus, 6 May 2010
    Last edited: 6 May 2010
  6. sultan128

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

    Joined:
    6 Apr 2008
    Messages:
    45
    Likes Received:
    37
    Reputations:
    -5
    Всем спс, заюзал последний вариант
     
  7. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Ребятки а кто мне поможет, очень нужно, нигде найти не могу парсера что бы делал из текста: user:86359b816ab3adff0ae96dbed4b7ddb6 в текст:
    86359b816ab3adff0ae96dbed4b7ddb6:user
    Заранее очень благодарен! Пойдет и php и perl


    А еще лучше если парсер будет объединять 2 словаря, список юзеров и хэшей в:
    86359b816ab3adff0ae96dbed4b7ddb6:user
     
    #7 cipa21, 10 May 2010
    Last edited: 10 May 2010
  8. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    A Python ?
    Code:
    #!/usr/bin/env python
    #-*-encoding:UTF-8-*-
    with open("input_1.txt") as inpt1:
        with open("input_2.txt") as inpt2:
            with open("out.txt", "w") as out:
                for line in inpt1:
                    line = line.strip().split(":")
                    if len(line) == 2:
                        out.write("{0}:{1}\n".format(line[1], line[0]))
                    else:
                        print "BAD FORMAT {0}".format(":".join(line))
                for line in inpt2:
                    line = line.strip().split(":")
                    if len(line) == 2:
                        out.write("{0}:{1}\n".format(line[1], line[0]))
                    else:
                        print "BAD FORMAT {0}".format(":".join(line))
    
    Уже для двух файлов )
     
    #8 login999, 10 May 2010
    Last edited: 10 May 2010
  9. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Спс, щас питон поставлю ,проверю, спасибо за заботу и помощ ;)
     
  10. altblitz

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

    Joined:
    5 Jun 2009
    Messages:
    3,697
    Likes Received:
    3,139
    Reputations:
    236
    Kusto!
    пугаешь молодёжь RegEx-сами ))

    написан код правильно.
     
  11. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    пишет BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb1
    BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb2
    BAD FORMAT user1
    BAD FORMAT user2
     
  12. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Конешн, слава богу что додумался сделать проверку )))
    Чет мну кажется что я тебя не совсем верно понял.
    Code:
    #!/usr/bin/env python
    #-*-encoding:UTF-8-*-
    with open("input_1.txt") as inpt1:
        with open("input_2.txt") as inpt2:
            with open("out.txt", "w") as out:
                while True:
                    try:
                        part_one = inpt1.next().strip()
                        part_two = inpt2.next().strip()
                        out.write("{0}:{1}\n".format(part_one, part_two))
                    except StopIteration:
                        print "FINISHED"
                        break
    raw_input()
    
    Попробуй так.
    Прошлый же делает замену как ты хотел + делает это для двух файлов и пишет в третий.
     
    #12 login999, 10 May 2010
    Last edited: 10 May 2010
  13. cipa21

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

    Joined:
    9 Apr 2009
    Messages:
    548
    Likes Received:
    146
    Reputations:
    30
    Спасибо большое добрый человек, в этот раз все прекрасно заработало, то что надо!
     
  14. login999

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

    Joined:
    12 Jun 2008
    Messages:
    491
    Likes Received:
    280
    Reputations:
    92
    Не за что.
    P.S. Плохо искал, я когда-то такое писал, годика полтора назад.