我的问题就像Split string on spaces in Java, except if between quotes (i.e. treat \"hello world\" as one token),但用NSIS的方式。希望没有任何外部插件。
如何根据空格拆分字符串,但将引号子字符串作为一个单词进行拆分? 示例: 地点“欢迎来到印度”班加罗尔钱奈"IT城市“迈索尔 它应该存储在ArrayList中 欢迎来到印度班加罗尔Channai IT城市迈索尔
发布于 2013-10-28 20:27:12
没有插件就没有数组支持,所以我忽略了数组部分。
任何字符串操作都可以使用NSIS中的三个基本字符串函数(StrLen、StrCpy和StrCmp)执行:
!include LogicLib.nsh
Function SplitArg
Exch $0 ; str
Push $1 ; inQ
Push $3 ; idx
Push $4 ; tmp
StrCpy $1 0
StrCpy $3 0
loop:
StrCpy $4 $0 1 $3
${If} $4 == '"'
${If} $1 <> 0
StrCpy $0 $0 "" 1
IntOp $3 $3 - 1
${EndIf}
IntOp $1 $1 !
${EndIf}
${If} $4 == '' ; The end?
StrCpy $1 0
StrCpy $4 ' '
${EndIf}
${If} $4 == ' '
${AndIf} $1 = 0
StrCpy $4 $0 $3
StrCpy $1 $4 "" -1
${IfThen} $1 == '"' ${|} StrCpy $4 $4 -1 ${|}
killspace:
IntOp $3 $3 + 1
StrCpy $0 $0 "" $3
StrCpy $1 $0 1
StrCpy $3 0
StrCmp $1 ' ' killspace
Push $0 ; Remaining
Exch 4
Pop $0
StrCmp $4 "" 0 moreleft
Pop $4
Pop $3
Pop $1
Return
moreleft:
Exch $4
Exch 2
Pop $1
Pop $3
Return
${EndIf}
IntOp $3 $3 + 1
Goto loop
FunctionEnd
Section
push 'Location "Welcome to india" Bangalore Channai "IT city" Mysore'
loop:
call SplitArg
Pop $0
StrCmp $0 "" done
DetailPrint Item=|$0|
goto loop
done:
SectionEndhttps://stackoverflow.com/questions/19626228
复制相似问题