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

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Поиск неизвестной строки в файле, ограниченной известными символами

Ответить
Настройки темы
Любой язык - [решено] Поиск неизвестной строки в файле, ограниченной известными символами

Аватара для m0nkrus

Старожил


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

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


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

Задача в следующем: имеется XML-файл, формирующийся автоматом при установке программы. В нем, кроме всего прочего, есть переменная величина, ограниченная тэгами (в моем случае выглядит: "<publisherID>4875E02D9FB21EE389F73B8D1702B320485DF8CE.1</publisherID>"). Какой будет эта величина, окруженная тэгами publisherID и даже сколько символов содержит, неизвестно. Необходимо считать эту строку, какая бы она не была, и передать в переменную. Ах да, еще желательно проверить на наличие самого файла, в котором находится искомая строка.

Отправлено: 17:36, 06-05-2011

 

Ветеран


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

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


Код: Выделить весь код
@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%
Если ваш xml всегда неизменный по своему форматированию, то можно ограничиться таким вариантов:
Код: Выделить весь код
@echo off
setlocal

if not exist 1.xml goto:eof
for /f "tokens=2 delims=<>" %%i in (' findstr "publisherID" 1.xml ') do set "value=%%i"

echo %value%
Останется только подобрать нужный токен (2 или 3), выделен красным

Отправлено: 18:13, 06-05-2011 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Googler


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

Профиль | Отправить 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
Благодарности: 6694

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


Коллеги,

Подниму тему, ибо похожая задача. Нужно найти ряд параметров и вывести их значения. Только пара выглядит так:
Код: Выделить весь код
param="value"
Я не знаю, как в CMD в качестве разделителя указать двойные кавычки. Возможно, есть другой подход? В идеале нужно найти все экземпляры param и вывести для них value.

Спасибо!

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 15:22, 17-04-2012 | #4


Ветеран


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

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


Цитата Vadikan:
как в CMD в качестве разделителя указать двойные кавычки. Возможно, есть другой подход? »
Я вот тоже думаю — а нужно ли?

Что если так — по «=» отбирать строки и по нему же делить:
Код: Выделить весь код
@echo off
setlocal enableextensions enabledelayedexpansion

for /f "tokens=1,2 delims==" %%i in ('type "C:\Песочница\0006\0001.txt"^|find.exe "="') do echo [%%~i] [%%~j]

endlocal
exit /b 0
Конечно, это при условии, что «=» не встретится где-нибудь внутри «value».

Отправлено: 16:29, 17-04-2012 | #5


(*.*)


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

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


Я не очень понял, как использовать этот код. Наверное, мне стоило полнее сформулировать задачу

В файле содержится много различной информации, в том числе XML вытянутый в одну строку. Скажем, там может быть 7-8 тысяч символов в дюжине строк. Пара param="value" фактически является атрибутом XML-узла.

Есть мысли о PowerShell, но не знаю, как он парсит XML, смешанный с другим мусором

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 18:19, 17-04-2012 | #6


Ветеран


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

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


Цитата Vadikan:
Есть мысли о PowerShell, но не знаю, как он парсит XML, смешанный с другим мусором »
Наверное его сначала надо вытянуть в отдельный файл. Если весь xml в отдельной строке в файле your.file:
Код: Выделить весь код
(gc your.file) -match "\<\?xml" | out-file -encoding utf8 temp.xml
А потом парсить temp.xml:
Код: Выделить весь код
$xml = new-object xml
$xml.load("$pwd\temp.xml")
И его уже обрабатывать.
При условии, что этот xml будет валидным.

Последний раз редактировалось Foreigner, 17-04-2012 в 21:07.

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

Отправлено: 21:02, 17-04-2012 | #7


(*.*)


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

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


Foreigner, спасибо, парсинг XML я проходил, когда делал CheckBootSpeed, а вот первую команду не знал.

Файл на работе (и по тем же причинам я его не публикую), надо посмотреть. ЕМНИП, нужная информация может быть просто во фрагментах XML-кода или в отдельных элементах, просто выдержанных в формате XML.

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 21:11, 17-04-2012 | #8


(*.*)


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

Профиль | Сайт | Отправить 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
temp.xml
Код: Выделить весь код
<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>
tidy-xml.cmd
Код: Выделить весь код
tidy.exe -m -config tidyconf.txt "temp.xml"
tidyconf.txt
Код: Выделить весь код
input-xml: y
indent: auto
markup: yes
wrap: 0

-------
Канал Windows 11, etc | Чат @winsiders


Отправлено: 12:27, 24-04-2012 | #9



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » Любой язык - [решено] Поиск неизвестной строки в файле, ограниченной известными символами

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход