Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   Нужен скрипт, выдерающий сотовый номера из txt. (http://forum.oszone.net/showthread.php?t=235835)

jellypop 02-06-2012 19:04 1926824

Нужен скрипт, выдерающий сотовый номера из txt.
 
Привет всем! Собственно, сабж! Нужен скрипт! Есть *.txt, в нём много сотовых номеров, стоят не попорядку, но между каждым есть пробел, а то и несколько. Все номера в виде : 79XXXXXXXXX. Задача: вытащить все эти номера в отдельный txt и чтобы они не повторялись.
Спасибо заранее за помощь!

Foreigner 02-06-2012 19:14 1926832

jellypop, пример файла txt?
Код:

@echo off
setlocal

for /f "tokens=*" %%i in (1.txt) do call:1 %%i
for /f "tokens=2 delims==" %%i in (' set 79 ') do 1>>2.txt echo %%i
goto:eof

:1
for %%i in (%*) do set "%%i=%%i"


Anonymоus 02-06-2012 19:28 1926837

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

Set PhoneNumbers=
For /F "delims=" %%N In ('grep -E -o "79[0-9]{9}" "file.txt"') Do (Echo !PhoneNumbers!|Find "%%N"||Set PhoneNumbers=!PhoneNumbers! %%N)
For %%A In (%PhoneNumbers%) Do (Echo %%A>>output.txt)

Проследите, чтобы бинарник grep был добавлен в Path или находился рядом со скриптом.

jellypop 02-06-2012 21:03 1926893

Первый скрипт не работает (не появляется 2.txt), второй - сейчас попробую.. :)
Пример файла:
Цитата:

Дата Время С номера На номер Регион Длит-ть Стоимость Тариф 02.02.2012 19:37:56 sip:sip@sip.sip 79********2 Московская область-Мобильный 00:00:00 0,00 00:01:00 2,00 2,00 22.04.2012 18:35:43 sip:sip@sip.sip 79********3 Московская область-Мобильный 00:00:00 0,00 00:01:00 2,00 2,00 22.04.2012 18:38:22 sip:sip@sip.sip 79********3 Московская область-Мобильный 00:00:00 0,00 00:00:00 0,00 2,00 22.04.2012 18:51:19 sip:sip@sip.sip 79********3 Московская область-Мобильный 00:00:00 0,00 00:01:00 2,00 2,00 29.04.2012 16:08:03 sip:sip@sip.sip 79********0 Московская область-Мобильный 00:00:00 0,00 00:01:00 2,00 2,00 05.05.2012 21:16:18 sip:sip@sip.sip 79********0 Московская область-Мобильный 00:00:00 0,00 2,00 05.05.2012 21:17:38 sip:sip@sip.sip 79********0 Московская область-Мобильный 00:00:00 0,00 00:02:00 4,00 2,00 05.05.2012 21:33:27 sip:sip@sip.sip 79********0 Московская область-Мобильный 00:00:00 0,00 00:02:00 4,00 2,00
Цитата:

Цитата Anonymоus
Проследите, чтобы бинарник grep был добавлен в Path или находился рядом со скриптом. »

grep на чистую систему запрашивает кучу библиотек, уже 4 по порядку скачал, сколько можно...? :)
лучше уж на bat.

Upd: не заметил архив зависимостей. Сейчас повторю попытку.
Upd2: даже не разобрался, как запустить скрипт. Аноним, уважаемый, подскажи.

Foreigner 02-06-2012 21:53 1926914

Цитата:

Цитата jellypop
Первый скрипт не работает (не появляется 2.txt) »

Проверил на твоем примере. Все работает. Исходный файл называется 1.txt?

Anonymоus 02-06-2012 21:59 1926917

jellypop, вот в этом архиве grep со всеми зависимостями и сам скрипт. Просто перетащите текстовый файл с номерами на него, и он создаст рядом файл output.txt, в котором будут только сами номера.
http://rghost.ru/38437215

jellypop 02-06-2012 22:07 1926923

Цитата:

Цитата Foreigner
Проверил на твоем примере. Все работает. Исходный файл называется 1.txt? »

Цитата:

Не удается найти файл 1.txt.
Переменная среды 79 не определена
Скрипт и текстовик лежит в одном каталоге, название точно 1.txt.

Цитата:

Цитата Anonymоus
jellypop, вот в этом архиве grep со всеми зависимостями и сам скрипт. Просто перетащите текстовый файл с номерами на него, и он создаст рядом файл output.txt, в котором будут только сами номера.
http://rghost.ru/38437215 »

Сейчас попробую.

Upd: что-то я какой-то точно деревянный. Положил текстовик с именем 1.txt в папку bin, запустил parse.cmd - и ничего.
Upd2: и батник заработал! чудеса прямо какие-то.
Upd3: КРИРО заработал ) аутпут.txt:
!PhoneNumbers!
79********0

Один какой-то номер только. )

Anonymоus 02-06-2012 22:15 1926924

jellypop, да не нужно в bin ложить, внутри bin только бинарник и либы для грепа. Там есть скрипт, parse.cmd, вот на него нужно перетянуть файл. И всё, никаких лишних телодвижений. Рядом появится output.txt, там будут номера.

Цитата:

Цитата jellypop
Upd3: КРИРО заработал ) аутпут.txt:
!PhoneNumbers!
79********0
Один какой-то номер только. ) »

Чудеса прямо. Я у себя тестировал, все номера в файле определяет, такое впечатление, что у вас не работает EnableDelayedExpansion по какой-то причине. Какая кодировка файла с номерами? Попробуйте в cp1251 пересохранить.

jellypop 02-06-2012 22:24 1926927

Цитата:

Цитата Anonymоus
jellypop, да не нужно в bin ложить, внутри bin бинарники и либы грепа. Там есть скрипт, parse.cmd, вот на него нужно перетянуть файл. И всё, никаких лишних телодвижений. Рядом появится output.txt, там будут номера. »

Перетащил, сначала чёрная консоль, затем идёт перебор номеров, видимо, т.к. на экране они мелькают, НО ЗАТЕМ:
Цитата:

Слишком длинная командная строка.
Слишком длинная командная строка.
Слишком длинная командная строка.
И так минуты две. Консоль закрывается, output.txt нигде нет.
P.S. Если это важно, то у меня текстовик в 3 МБ.

Anonymоus 02-06-2012 22:26 1926929

Цитата:

Цитата jellypop
P.S. Если это важно, то у меня текстовик в 3 МБ. »

Очень важно. Там же ограничение на число символов в строке, а проверку на дубли я именно так делаю. Сейчас перепишу под использование внешней утилиты uniqline

UPD: Сделал, пробуйте - http://rghost.ru/38437987

jellypop 02-06-2012 22:43 1926936

Всё отпарсилось, но вывод просто ужасный! Всё слиплось! Можно как-нибудь поправить, чтобы выводил каждый номер в новую строку?

Anonymоus 02-06-2012 22:55 1926944

А чем вы файл открываете? Там перевод строки юникс-стайл, и приличные (встроенный в windows блокнот таковым не считаю) текстовые редакторы воспроизводят его нормально, каждый номер с новой строки. Попробуйте AkelPad, например.
В конце-концов, если вам просто надо разово вытянуть номера из файла, киньте мне его в личку, я верну вывод в том виде, какой у вас будет читаться по номеру на каждую строку.

jellypop 02-06-2012 23:04 1926949

В AkelPad всё нормально. Как сделать так, чтобы в Windows блокноте был перенос?

Anonymоus 02-06-2012 23:05 1926950

Видите снизу в AkelPad'е, в статусной строке, там где кодировка указана, написано Unix? Кликните по этой надписи, когда там появится Win, сохраняете файл. Теперь в "блокноте" тоже будет открываться нормально.

jellypop 02-06-2012 23:17 1926960

Кликал один раз - не менялось, надо было двойной клик сделать. Всё, сохранил, всем большое спасибо, в частности анониму!


Время: 15:52.

Время: 15:52.
© OSzone.net 2001-