Пакетный скрипт для извлечения строки из файла - PullRequest
0 голосов
/ 10 декабря 2010

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

Я хочу, чтобы он поискал в XML-файле тег и извлек из него все до конца файла.

Итак, я думаю, например, в псевдо-javascript:

marketIndex = str.indexOf("<Markets>");
length = str.length;
marketString = str.substring(markeIndex, length-1);
return str;

У меня есть функция подстроки в bat:

:Substring
::Substring(retVal,string,startIndex,length)
:: extracts the substring from string starting at startIndex for the specified length 
 SET string=%2%
 SET startIndex=%3%
 SET length=%4%

 if "%4" == "0" goto :noLength
 CALL SET _substring=%%string:~%startIndex%,%length%%%
 goto :substringResult
 :noLength
 CALL SET _substring=%%string:~%startIndex%%%
 :substringResult
 set "%~1=%_substring%"
GOTO :EOF

и длина строковой функции:

:StrLength
::StrLength(retVal,string)
::returns the length of the string specified in %2 and stores it in %1
set #=%2%
set length=0
:stringLengthLoop
if defined # (set #=%#:~1%&set /A length += 1&goto stringLengthLoop)
::echo the string is %length% characters long!
set "%~1=%length%"
GOTO :EOF

так что я думаю, что мне не хватает функции indexOf () в bat ...

1 Ответ

3 голосов
/ 12 декабря 2010
rem indexof result haystack needle
:indexof
setlocal enabledelayedexpansion enableextensions
set result=
set "haystack=%~2"
call :strlength length %3
call :strlength haylength %2
set /a max=haylength-length
for /l %%i in (0,1,%max%) do (
    if "!haystack:~%%i,%length%!"=="%~3" (set result=%%i&goto indexofDone)
)
set result=-1
:indexofDone
endlocal && set %~1=%result%
goto :eof

Также доступно в моем SVN .Обратите внимание, что я изменил определение strLength, чтобы исправить некоторые ошибки:

:strlength
setlocal enableextensions
set "#=%~2"
set length=0
:stringLengthLoop
if defined # (set "#=%#:~1%"&set /A length+=1&goto stringLengthLoop)
endlocal && set "%~1=%length%"
GOTO :EOF

Обратите внимание, что все это вам совсем не поможет, так как анализ XML с пакетными файлами - это не то, что вы должны делать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...