|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Поиск неизвестной строки в файле, ограниченной известными символами |
|
Любой язык - [решено] Поиск неизвестной строки в файле, ограниченной известными символами
|
Старожил Сообщения: 148 |
Сразу прошу прощения, если подобный вопрос уже задавался. Я так и не смог достаточно кратко его сформулировать для поиска, чтобы найти аналог.
Задача в следующем: имеется XML-файл, формирующийся автоматом при установке программы. В нем, кроме всего прочего, есть переменная величина, ограниченная тэгами (в моем случае выглядит: "<publisherID>4875E02D9FB21EE389F73B8D1702B320485DF8CE.1</publisherID>"). Какой будет эта величина, окруженная тэгами publisherID и даже сколько символов содержит, неизвестно. Необходимо считать эту строку, какая бы она не была, и передать в переменную. Ах да, еще желательно проверить на наличие самого файла, в котором находится искомая строка. |
|
Отправлено: 17:36, 06-05-2011 |
Ветеран Сообщения: 1758
|
@echo off setlocal if not exist 1.xml goto:eof for /f "tokens=*" %%i in (' findstr "publisherID" 1.xml ') do ( for /f "tokens=2 delims=<>" %%j in ( "%%i" ) do set "value=%%j" ) echo %value% Останется только подобрать нужный токен (2 или 3), выделен красным |
Отправлено: 18:13, 06-05-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Googler Сообщения: 3665
|
Профиль | Отправить PM | Цитировать на тот случай, если количество тегов в строке несколько:
@Echo Off SetLocal EnableDelayedExpansion Set "$f=.\1.xml" Set "$t=publisherID" Set "$v="& If Exist "%$f%" ( For /F "Delims=" %%a In ('^<"%$f%" Find "<%$t%>"^|Find "</%$t>%"') Do (Set "$a=%%a" Call Set "$t1=%%$a:*<!$t!>=%%"& Call Set "$t2=</!$t!>%%$a:*</!$t!>=%%"& Call Set "$v=%%$t1:!$t2!=%%") If Not Defined $v echo File "%$f%" Not Contain Tag "<%$t%>" or Tag Empty^^!& GoTo:Continue ) Else Echo File "!$f!" Not Found^^!& GoTo:Continue Echo %$t%=%$v% :Continue Pause>Nul |
Отправлено: 19:01, 06-05-2011 | #3 |
(*.*) Сообщения: 36561
|
Профиль | Сайт | Отправить PM | Цитировать Коллеги,
Подниму тему, ибо похожая задача. Нужно найти ряд параметров и вывести их значения. Только пара выглядит так: Я не знаю, как в CMD в качестве разделителя указать двойные кавычки. Возможно, есть другой подход? В идеале нужно найти все экземпляры param и вывести для них value. Спасибо! |
------- Отправлено: 15:22, 17-04-2012 | #4 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата Vadikan:
Что если так — по «=» отбирать строки и по нему же делить: Конечно, это при условии, что «=» не встретится где-нибудь внутри «value». |
||
Отправлено: 16:29, 17-04-2012 | #5 |
(*.*) Сообщения: 36561
|
Профиль | Сайт | Отправить PM | Цитировать Я не очень понял, как использовать этот код. Наверное, мне стоило полнее сформулировать задачу
![]() В файле содержится много различной информации, в том числе XML вытянутый в одну строку. Скажем, там может быть 7-8 тысяч символов в дюжине строк. Пара param="value" фактически является атрибутом XML-узла. Есть мысли о PowerShell, но не знаю, как он парсит XML, смешанный с другим мусором ![]() |
------- Отправлено: 18:19, 17-04-2012 | #6 |
Ветеран Сообщения: 1758
|
Цитата Vadikan:
А потом парсить temp.xml: И его уже обрабатывать. При условии, что этот xml будет валидным. |
|
Последний раз редактировалось Foreigner, 17-04-2012 в 21:07. Отправлено: 21:02, 17-04-2012 | #7 |
(*.*) Сообщения: 36561
|
Профиль | Сайт | Отправить PM | Цитировать Foreigner, спасибо, парсинг XML я проходил, когда делал CheckBootSpeed, а вот первую команду не знал.
Файл на работе (и по тем же причинам я его не публикую), надо посмотреть. ЕМНИП, нужная информация может быть просто во фрагментах XML-кода или в отдельных элементах, просто выдержанных в формате XML. |
------- Отправлено: 21:11, 17-04-2012 | #8 |
(*.*) Сообщения: 36561
|
Профиль | Сайт | Отправить PM | Цитировать В итоге пришел именно к парсингу XML средствами PowerShell, задавая не только начало, но и конец диапазона с помощью (.+)
Почему-то в отдельный файл вытягивались данные не с начала диапазона, а с начала строки, на которой он находился. Но это было легко поправить с HTML Tidy (тем более, что все равно это было необходимо по другой причине). parse-xml.ps1 #вытягиваем данные из файла source-file.txt в temp.xml #диапазон от '[message' до '<CUSTOM_XML>' (gc "source-file.txt") -match "\[message(.+)\<\/CUSTOM_XML\>" | out-file -encoding utf8 temp.xml #очищаем XML cmd /c "C:\mydir\tidy-xml.cmd" # примерный код temp.xml показан ниже $xmlFile = "temp.xml" [xml]$doc = Get-Content $xmlFile #выводим нужные параметры на экран write-host Param1: $doc.CUSTOM_XML.Section.Param1 write-host Param2: $doc.CUSTOM_XML.Section.Param2 write-host Param-pam:$doc.CUSTOM_XML.Section.SubSection.Param-pam write-host Param-pam-pam:$doc.CUSTOM_XML.Section.SubSection.Param-pam-pam <CUSTOM_XML v="5.0 " xv="109" s="20090815" cv="0001"> <Section Param1="1336378130756" Param2="ef2922ad-fada-4f59-90d6-dde370dfc695" Param3="0"> <SubSection Param-pam="Bla" Param-pam-pam="Bla-bla" /> </SubSection> </Section> </CUSTOM_XML> tidyconf.txt |
------- Отправлено: 12:27, 24-04-2012 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - [решено] в файле найти дату, скопировать символы, дописать перед символами в другом файле | sucher | Скриптовые языки администрирования Windows | 7 | 10-03-2016 17:42 | |
VBS/WSH/JS - Поиск\редактирование строки в текстовом файле | pavvel | Скриптовые языки администрирования Windows | 2 | 11-04-2012 16:38 | |
CMD/BAT - [решено] Поиск и удаление строки в файле по сложным условиям | m0nkrus | Скриптовые языки администрирования Windows | 9 | 26-06-2011 10:37 | |
CMD/BAT - [решено] Поиск строки в файле и замена её на набор из случайных чисел и букв | Sub-Zero | Скриптовые языки администрирования Windows | 6 | 08-02-2011 18:54 | |
[решено] поиск строки в WORD файле.... | garanov | AutoIt | 3 | 19-03-2010 09:16 |
|