Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  

Название темы: Парсинг XML/TXT
Показать сообщение отдельно

Старожил


Сообщения: 415
Благодарности: 257

Профиль | Отправить PM | Цитировать


mxm199, нет, повышения быстродействия не будет, т.к. grep отрабатывает всю регулярку целиком за один запуск. Если бы я каждый раз на определённый шаблон номера запускал по процессу grep'а, тогда стоило бы оптимизировать.
Сколько строк в файле?
Попробуйте вот это, тут убрано всё лишнее и разделитель изменён на точку с запятой. Кроме того, быстродействие повышено из-за фильтрации пустых строк через If, а не grep, как в прошлом варианте.
Код: Выделить весь код
@Echo Off
Set Path=%Path%;%CD%\bin

Set XMLFile=file.txt

For /F "tokens=1,* delims=:" %%A In ('grep -Eiorhn "([[:alnum:]_.-]+@[[:alnum:]_.-]+?\.[[:alpha:].]{2,6})" "%XMLFile%"') Do (Set EMail_%%A=%%B&Set EMails=%%A)
For /F "tokens=1,* delims=:" %%A In ('grep -oin "\(([0-9]\{3\})\|[0-9]\{3\}\)[ -]\?[0-9]\{3\}[ -]\?[0-9]\{4\}" "%XMLFile%"') Do (Set Phone_%%A=%%B&Set Phones=%%A)
If %EMails% GEQ %Phones% (Set Matches=%EMails%) Else (Set Matches=%Phones%)
SetLocal EnableDelayedExpansion
For /L %%A In (1,1,%Matches%) Do (
	Set Out=!Phone_%%A!;!EMail_%%A!
	If Not "!Out!"==";" Echo !Out!>>"out.txt"
)
Pause&Exit

Последний раз редактировалось Anonymоus, 17-07-2012 в 10:22.

Это сообщение посчитали полезным следующие участники:

Отправлено: 10:15, 17-07-2012 | #5

Название темы: Парсинг XML/TXT