0

私の質問は、引用符の間を除いて (つまり、\"hello world\" を 1 つのトークンとして扱う)、NSIS の方法で、Java のスペースで文字列を分割するようなものです。うまくいけば、外部プラグインなしで。

スペースに基づいて文字列を分割し、引用符で囲まれた部分文字列を 1 つの単語として取得するにはどうすればよいですか?

例:

Location "Welcome to india" Bangalore Channai "IT city"  Mysore

としてArrayListに格納する必要があります

Location
Welcome to india
Bangalore
Channai
IT city
Mysore
4

1 に答える 1

2

プラグインなしでは配列のサポートがないため、配列の部分は省略しました。

NSIS の 3 つの基本的な文字列関数 (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:
SectionEnd
于 2013-10-28T20:27:12.287 に答える