2010-12-10 15 views
0

私はいくつかの文字列操作ルーチンを見てきました。これをいくつかの他の言語で行うことができますが、簡単にするためにバッチファイルにしたいと思います。ファイルから文字列を抽出するためのバッチスクリプト

タグのXMLファイルを検索し、そこからファイルの最後まですべてを抽出したいと考えています。

: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 

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

私はサブバットで機能を持っている:

は、だから私は、擬似JavaScriptで例えば、推測します

だから、私はバットで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つの部分です。 –

+1

@カミロ:何ですか?読めない?これはおそらく私が書いたよりわかりやすいバッチコードの一つです:-)。私はそれにもかかわらず、 'strLength'は可能な限り明確ではないが、それはOPから直接取られたことに同意する。 – Joey

+0

Brilliant Joey :)明日テストしますが、それは素晴らしいようです。 –

関連する問題