Войти

Показать полную графическую версию : Как получить значение искомой подстроки в строке?


Loki3D
31-03-2010, 11:20
Есть XML файл, состоящий из одной Длинной строчки
нужно найти в этой строчке упоминание переменной xxx и получить ее значение.
Например.
кусок строки XML: ... aaa="1" bbb=2 ccc="acb" ... xxx="4" ....

вот как то нужно Чему равно xxx

Busla
31-03-2010, 15:45
А wsh совсем не катит?

Loki3D
31-03-2010, 15:50
Busla, Катит. Программист уже написал VBSCript.
Хотелось узнать авторитетное мнение, можно ли такое на CMD, а то у самого не получилось.

zonderz
31-03-2010, 16:45
Loki3D

findstr

Loki3D
31-03-2010, 16:50
zonderz, и как это поможет?

zonderz
31-03-2010, 17:01
Loki3D

сорри, не заметил что у вас текст в одной строке...

тогда
http://www.dostips.com/DtTipsStringManipulation.php
http://www.google.ru/search?hl=ru&newwindow=1&client=firefox-a&hs=WmI&rls=org.mozilla%3Aen-US%3Aofficial&q=find+substring+in+string+dos&btnG=%D0%9F%D0%BE%D0%B8%D1%81%D0%BA&lr=&aq=f&aqi=&aql=&oq=&gs_rfai=

Loki3D
31-03-2010, 17:48
zonderz, спасибо за первую ссылку, но к сожалению при попытке использовать пример
set str=the cat in the hat
echo.%str%
set str=%str:the =%
echo.%str%
получаю ошибку что слишком большая строка, в SET
не говоря уже о том, что пока не представляю, как можно передать строчку из файла в переменную.

zonderz
31-03-2010, 23:30
Loki3D

можно делать - точно говорю, не могу сейчас наптсать - давно было - еще в 95том
штудируйте по дос команды

Busla
01-04-2010, 17:42
Если бы была уверенность, что xml записан именно так, я бы разбил вход на подстроки используя в качестве разделителя пробел, получились бы подстроки с присвоениями и ненужный мусор. Эти подстроки разбиваем через знак равенства и получаем пары атрибут и значение. Но в общем случае и вокруг знака равно могут быть пробелы, и после значения может не только пробел.

Loki3D
01-04-2010, 17:49
Busla, как бы ты разбил?. через FOR ?
там же получается Множество значений, раделенных пробелами. и не всегда можно угадать на какую из букв переменной %%а..%%я будет приходится искомая пара xxx=??. Строка то одна.

NiOl
01-04-2010, 21:09
Сложный случай. Во-первых у cmd ограничение длины строки в 4095 по-дефолту (кажется), расширяемое до 16383 (кажется). если Ваш однострочный XML больше, вернее нужная Вам переменная находится дальше границы - то возможно только с привлечением софтин, не входищих в Виндовс по-дефолту.

Далее, сильное влияние на код окажет начало XML-файла, которое просьба здесь процетировать. (не значит, что дословно, все переменные и их значения можете заменить на любые беспалевные для Вас, важна сама структура до начала списка переменных, ну включая первые несколько переменных, чтобы подогнать без ошибок...
Но вообще возможно таким образом (ставка сделана на то, что знак "=" не может оказаться в кавычках, а также на то, что значения переменных не могут содержать пробелов, а разрыв между переменными сделан исключительно на пробелах. *видите сколько "условностей"? ;) )

@echo off
SetLocal EnableExtensions
SetLocal EnableDelayedExpansion

set File="SOURCE.XML"
set Var=xxx

for /f "usebackq tokens=* delims=" %%L in (%File%) do (
set Line=%%L
:XML
for /f "usebackq tokens=1,* delims= " %%B in ('!Line!') do (
for /f "usebackq tokens=1,* delims==" %%V in ('%%B') do if "%%V"=="%Var%" set Value=%%~W
set Line=%%C
)
if not "!Line!"=="" goto XML
)

if not "%Value%"=="" echo %Value%
зы: Если на выходе нужно сохранить двойные кавычки - в фрагменте set Value=%%~W убирите тильду.

in1975@vk
24-02-2018, 08:37
а можно из этого достать только url (все в строчке)?

<?xml version='1.0' encoding='UTF-8'?>
<titlepatch status="alive" titleid="BLUS31181"><tag name="BLUS31181_T38" popup="true" signoff="true"><package version="01.13" size="9028848240" sha1sum="1c2d1b7c90fdf2de2902d215cad360fd8702ef3a" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0013-A0113-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.14" size="31146880" sha1sum="5f6f7b4191310888daac9ac9a471ee31e012dfd9" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0014-A0114-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.15" size="31376272" sha1sum="e9d1a0e1aad21357e734c8c04eddfd0c2a33495b" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0015-A0115-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.16" size="387354160" sha1sum="ad606edb241465eb66878e4a68635d366124994d" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0016-A0116-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.17" size="49766464" sha1sum="ee40beab87c57030d54049d6a65560ac50eec7d6" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0017-A0117-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.18" size="352585248" sha1sum="3c12317cbf2d416bf529b0cc582df5c332722045" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0018-A0118-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.19" size="100275776" sha1sum="be08f4328f8658396396a86aa40284fc2c2a3931" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0019-A0119-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.20" size="1122184704" sha1sum="5410b588380f9180739116d72a945b4b8b7a77c3" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0020-A0120-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.21" size="33303440" sha1sum="3144fb7d932ce00ebaa1463532eb98c84d944eaf" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0021-A0121-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.22" size="220153536" sha1sum="f774924769df05e1c61790a98d227241839b5e41" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0022-A0122-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.23" size="55506352" sha1sum="cf5fa69c7ac86465a0f718c9f7d91ee4017be6aa" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0023-A0123-V0100-PE.pkg" ps3_system_ver="04.5000"/><package version="01.24" size="31589024" sha1sum="d70b4eb6596a40e7b92f433f6c6badfb0e43f37f" url="http://b0.ww.np.dl.playstation.net/tppkg/np/BLUS31181/BLUS31181_T38/a6eff409d3a4c771/UP0002-BLUS31181_00-DESTINYPATCH0024-A0124-V0100-PE.pkg" ps3_system_ver="04.5000"><paramsfo><TITLE>Destiny</TITLE></paramsfo></package></tag></titlepatch>


Подскажите батник пожалуйста




© OSzone.net 2001-2012