2010-12-10 2 views
0

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

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

Так что, полагаю, например, в псевдо-JavaScript:

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

У меня есть функция подстроки в летучей мыши:

: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() в бит ...

+0

Это было бы не так просто, как фрагмент JS, если бы это было написано в летучей мыши. – user502515

+0

да, я нахожу это ... –

+0

Моя личная рекомендация: вы потратите меньше времени на то, чтобы написать что-нибудь, даже, C (!), Чем в псевдоязыке партии. –

ответ

3
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 

Также имеется in my 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 с помощью пакетных файлов не то, что вы должны сделать.

+2

+1 потому что это один кусок нечитаемой умности. –

+1

@Camilo: Что? Unreadable? Вероятно, это одна из наиболее читаемых частей кода партии, которые я написал :-). Я согласен с тем, что 'strLength' не так ясен, как могло бы быть, но это было взято непосредственно из OP. – Joey

+0

Brilliant Joey :) Завтра будет тестироваться, но он выглядит великолепно. –

Смежные вопросы