Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 08.01.2015, 10:17   #1
Alex-platinum
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию .bat скрипт для замены/поиска строки

Всем привет!
Несколько часов мучаюсь с поиском решения.. вопрос наверно простейший) но никак не могу решить его.

Есть программа которая генерирует содержимое в формате .XML вот такого содержания:

(для удобства разделил код построчно, а вообще он одной строкой (play.xml))
Код:
<?xml version="1.0" encoding="windows-1251" ?>
<ELEM_LIST>
<ELEM PLAYER_NAME="Плеер" SCH_ID="0" SCH_NAME="Default" STATUS="playing">
<START_TIME>09:47:17</START_TIME>
<START_DATE>2015-01-08</START_DATE>
<BLK_TYPE>Б</BLK_TYPE>
<TYPE></TYPE>
<NAME>Faded (Original Mix)</NAME>
<ARTIST>ZHU</ARTIST>
<AUTHOR></AUTHOR>
<ALBUM></ALBUM>
<DBID></DBID>
<FILE_NAME>D:\music\311014\ZHU - Faded (Original Mix)1.mp3</FILE_NAME>
<DURATION>00:03:52</DURATION>
</ELEM><ELEM PLAYER_NAME="Плеер" SCH_ID="0" SCH_NAME="Default" STATUS="preloaded">
<BLK_TYPE>Б</BLK_TYPE>
<TYPE></TYPE>
<NAME>Cloud Breaker (Basto Radio Mix) (DFM ID)</NAME>
<ARTIST>Basto &amp; Yves V</ARTIST>
<AUTHOR></AUTHOR>
<ALBUM></ALBUM>
<DBID></DBID>
<FILE_NAME>D:\music\12082012\Basto &amp; Yves V - Cloud Breaker (Basto Radio Mix) (DFM ID) .mp3</FILE_NAME>
<DURATION>00:03:18</DURATION>
</ELEM>
</ELEM_LIST>
Из этого XML файла нужно bat файлом найти нужные строки и вывести их в отдельный файл meta.txt (с перезаписью содержимого файла)

В данном случае должно вывести в файл meta.txt это:
ZHU - Faded (Original Mix)

(получается нужно найти всё от начала строки, до первого попавшегося <TYPE></TYPE><NAME>, затем взять всё ДО строки </NAME>, потом так же с <ARTIST>, и полученные Faded (Original Mix) ZHU поменять местами и между ними поставить знак '-' и записать в файлик)

В целом должно получиться так:
программа выдала XML. Я открыл bat файл и в нужном месте создался txt с одной строкой формата "Исполнитель - Название"

второй элемент не должен обрабатываться (Basto &amp; Yves V - Cloud Breaker (Basto Radio Mix) он отсекается как левый ненужный код.

Помогите пожалуйста, куда копать)
Alex-platinum вне форума Ответить с цитированием
Старый 08.01.2015, 10:25   #2
Arigato
Высокая репутация
СуперМодератор
 
Аватар для Arigato
 
Регистрация: 27.07.2008
Сообщений: 15,646
По умолчанию

CMD не самый лучший выбор для парсинга. Хотя наверняка можно и на нем сделать, но через одно место.
Arigato на форуме Ответить с цитированием
Старый 08.01.2015, 10:30   #3
Alex-platinum
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Arigato Посмотреть сообщение
CMD не самый лучший выбор для парсинга. Хотя наверняка можно и на нем сделать, но через одно место.
А какие варианты ещё есть? Мне впринципе все равно.. лишь бы вытаскивать инфу из файла
Alex-platinum вне форума Ответить с цитированием
Старый 08.01.2015, 10:51   #4
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,229
По умолчанию

Цитата:
Сообщение от Alex-platinum Посмотреть сообщение
А какие варианты ещё есть? Мне впринципе все равно.. лишь бы вытаскивать инфу из файла
Любой ЯВУ - начиная с Pascal/Delphi и заканчивая C++,C#, Java...
Serge_Bliznykov вне форума Ответить с цитированием
Старый 08.01.2015, 11:32   #5
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Теоретически в БАТнике можно.
Вот вспомнив написал так:
Код:
for /F "tokens=1 delims=><" %%i in (q.xml) do echo %%i
Только не оч помню как правильно парсить.

P.S. Усе. Вспомнил:
Код:
for /F "tokens=1,2 delims=><" %%i in (q.xml) do (if "%%i" == "NAME" echo %%j)
Выдирает список NAME из файла.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.01.2015, 11:43   #6
Alex-platinum
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
P.S. Усе. Вспомнил:
Код:
for /F "tokens=1,2 delims=><" %%i in (q.xml) do (if "%%i" == "NAME" echo %%j)
Выдирает список NAME из файла.
Получилось что то вроде того:
C:\Users\Александр\Desktop>for /F "tokens=1,2 delims=><" %i in (play.xml) do (if
"%i" == "NAME" echo %j )

C:\Users\Александр\Desktop>(if "?xml version="1.0" encoding="windows-1251" ?" ==
"NAME" echo ELEM_LIST )

C:\Users\Александр\Desktop>pause
Для продолжения нажмите любую клавишу . . .
Alex-platinum вне форума Ответить с цитированием
Старый 08.01.2015, 11:54   #7
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Что-то не так делаешь...
Я проверял у меня получалось выдирать названия.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 08.01.2015, 12:04   #8
Alex-platinum
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Stilet Посмотреть сообщение
Что-то не так делаешь...
Я проверял у меня получалось выдирать названия.
Запустил .bat:
Код:
for /F "tokens=1,2 delims=><" %%i in (play.xml) do (if "%%i" == "NAME" echo %%j)
pause
Alex-platinum вне форума Ответить с цитированием
Старый 10.01.2015, 10:22   #9
Alex-platinum
 
Регистрация: 08.01.2015
Сообщений: 7
По умолчанию

Подсказали тут вот такой скрипт:

Код:
@echo OFF

set NAME=
set ARTIST=

findstr /b "<NAME>" play.xml > name1.txt
findstr /b /n "<NAME>" name1.txt > name2.txt
findstr /b "1:<NAME>" name2.txt > name3.txt
(for /f "usebackq tokens=3 delims==>,<" %%i in ("name3.txt") do echo %%i)>"name4.txt"
for /f "usebackq tokens=3 delims==>,<" %%i in ("name3.txt") do (set "NAME=%%i")

findstr /b "<ARTIST>" play.xml > artist1.txt
findstr /b /n "<ARTIST>" artist1.txt > artist2.txt
findstr /b "1:<ARTIST>" artist2.txt > artist3.txt
(for /f "usebackq tokens=3 delims==>,<" %%i in ("artist3.txt") do echo %%i)>"artist4.txt"
for /f "usebackq tokens=3 delims==>,<" %%i in ("artist3.txt") do (set "ARTIST=%%i")

echo %ARTIST% - %NAME% > meta.txt
Но что то не работает скрипт( выводит первую команду как пустую строку
(findstr /b "<NAME>" play.xml > name1.txt)
т.е. name1.txt пустой... убираю параметр /b и в name1.txt выводится весь текст из XLS
Alex-platinum вне форума Ответить с цитированием
Старый 10.01.2015, 13:29   #10
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,097
По умолчанию

Я не знаю что ты делаешь не так, но у меня все получилось:
Безымянный.jpg
I'm learning to live...
Stilet вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
регулярные выражения для поиска и замены Елена Гох Microsoft Office Access 7 18.01.2011 19:39
Макрос для поиска и замены слов на слова с верхним подчеркиванием salvafion Microsoft Office Word 4 07.09.2009 19:14
Макрос для поиска/замены Davidoff Microsoft Office Excel 1 20.01.2007 16:01