![]() |
Парсинг XML/TXT
Доброго всем времени суток, опять обращаюсь за помощью )
Суть такова, имеется xml-файл (мноооооого строк), ну даже наверное точнее будет сказать txt, ибо как тэги там непонятные, в некоторых строках содержатся такие записи - NUM="1234567890" и MAIL="mail@mail.ru" соответственно в одной строке номеру соответствует мыльник, кое-где мыльников нет Нужно извлечь в другой файл номера и адреса, т.е. 1234567890 mail@mail.ru 0987654321 mail2@mail.ru .... Возможно ли? Заранее спасибо! |
Цитата:
|
Вариант с использованием grep. Он основан на регулярных выражениях, поэтому универсален и не зависит от тэгов XML или чего-то ещё. Главное для составления пары "телефон-email" это то, чтобы они оба находились на одной строке.
Распознаваемые форматы номеров: 123-456-7890 (123)456-7890 123 456 7890 1234567890 Файл, на котором проверялась работа скрипта: Код:
NUM="1234567890" MAIL="mail@mail.ru" Код:
@Echo Off |
.....честно говоря слов нет. Профессионально. СПАСИБО!
Только вопрос нарисовался ) Если регулярку по номерам обрезать только до поиска 1234567890 (номера только такого формата, это не телефоны а уникальные номера) скорость поиска увеличится? Можно ли разделить не табами а ";" ? И на Вашем файле тестовом отлично отработал, а на моём в ~6000 тыс. строк, тоже всё нашёл, но сам не завершился, стал крутить до бесконечности, выдавая - "Неверное число. Числа ограничены 32 битами чётности. 0%" (точнее это выдавать он начал сразу, но отбирал данные) пока сам не прервал процесс. (это судя по-всему из-за процентов выполнения), но и с отключенным этим блоком, всё равно, не завершает процесс |
mxm199, нет, повышения быстродействия не будет, т.к. grep отрабатывает всю регулярку целиком за один запуск. Если бы я каждый раз на определённый шаблон номера запускал по процессу grep'а, тогда стоило бы оптимизировать.
Сколько строк в файле? Попробуйте вот это, тут убрано всё лишнее и разделитель изменён на точку с запятой. Кроме того, быстродействие повышено из-за фильтрации пустых строк через If, а не grep, как в прошлом варианте. Код:
@Echo Off |
строк изначально было порядка 6000, но я обрезал до 20, смысл тот же остался (на старом варианте)
на этом тоже самое, т.е. Ваш тестовый отлично отрабатывает и выходит, на моём файле ни в какую, тоже отрабатывает, всю информацию выбирает, но закрываться не хочет, только контрол-с помогает... п.с. и всё-таки с табами оказалось лучше, извиняюсь ) |
Пример файла можно?
|
Послал в личку
|
mxm199, убрал универсальные регэкспы, заточил под тот формат файла, что вы мне дали.
Код:
@Echo Off |
) работает! КРАСОТА! Спасибо!
для вывода в файл добавляю строку Echo !Phone_%%A!!EMail_%%A!|grep -vi "(ECHO)">>out.txt ? |
Для вывода в файл заменяете
Код:
If Not "!Out!"==" " Echo !Out! Код:
If Not "!Out!"==" " Echo !Out!>>"out.txt" |
Время: 16:24. |
Время: 16:24.
© OSzone.net 2001-