PDA

Просмотр полной версии : Вытащить определенные фрагменты из txt


sultan128
06.05.2010, 02:52
Есть текстовый файл, предполжим такого вида:
"...Параметр -savehelps заставляет сохранить файл helps.txt. Фрагмент файла ROM=KJF5IDJGJ для иллюстрации: ... #RACE хранит шаблон, по которому создаются мобы определенной ROM=2JL7JVS9GJ разновидности (расы, вида и т.п.). ..."
Как вытащить то, что находится после "ROM=" в отдельный файл? чтобы на выходе был txt, содержий в себе:
KJF5IDJGJ
2JL7JVS9GJ
.............

zer0day
06.05.2010, 03:16
Такая штука парсер называется

Kusto
06.05.2010, 03:29
Есть текстовый файл, предполжим такого вида:
"...Параметр -savehelps заставляет сохранить файл helps.txt. Фрагмент файла ROM=KJF5IDJGJ для иллюстрации: ... #RACE хранит шаблон, по которому создаются мобы определенной ROM=2JL7JVS9GJ разновидности (расы, вида и т.п.). ..."
Как вытащить то, что находится после "ROM=" в отдельный файл? чтобы на выходе был txt, содержий в себе:
KJF5IDJGJ
2JL7JVS9GJ
.............

Проверь (мне лень)

<?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

Fepsis
06.05.2010, 03:29
#!/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);

lukmus
06.05.2010, 03:30
это на руби, не тестировалось

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

sultan128
06.05.2010, 04:58
Всем спс, заюзал последний вариант

cipa21
10.05.2010, 09:24
Ребятки а кто мне поможет, очень нужно, нигде найти не могу парсера что бы делал из текста: user:86359b816ab3adff0ae96dbed4b7ddb6 в текст:
86359b816ab3adff0ae96dbed4b7ddb6:user
Заранее очень благодарен! Пойдет и php и perl


А еще лучше если парсер будет объединять 2 словаря, список юзеров и хэшей в:
86359b816ab3adff0ae96dbed4b7ddb6:user

login999
10.05.2010, 09:33
A Python ?

#!/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))

Уже для двух файлов )

cipa21
10.05.2010, 09:37
Спс, щас питон поставлю ,проверю, спасибо за заботу и помощ ;)

altblitz
10.05.2010, 10:02
Kusto!
пугаешь молодёжь RegEx-сами ))

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

cipa21
10.05.2010, 10:10
A Python ?

#!/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))

Уже для двух файлов )
пишет BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb1
BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb2
BAD FORMAT user1
BAD FORMAT user2

login999
10.05.2010, 10:17
пишет BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb1
BAD FORMAT 86359b816ab3adff0ae96dbed4b7ddb2
BAD FORMAT user1
BAD FORMAT user2
Конешн, слава богу что додумался сделать проверку )))
Чет мну кажется что я тебя не совсем верно понял.

#!/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()

Попробуй так.
Прошлый же делает замену как ты хотел + делает это для двух файлов и пишет в третий.

cipa21
10.05.2010, 10:20
Спасибо большое добрый человек, в этот раз все прекрасно заработало, то что надо!

login999
10.05.2010, 10:22
Спасибо большое добрый человек, в этот раз все прекрасно заработало, то что надо!
Не за что.
P.S. Плохо искал, я когда-то такое писал, годика полтора назад.