首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用空格计数和拆分字符串,除非在NSIS中的引号之间

使用空格计数和拆分字符串,除非在NSIS中的引号之间
EN

Stack Overflow用户
提问于 2013-10-28 02:14:05
回答 1查看 1.2K关注 0票数 0

我的问题就像Split string on spaces in Java, except if between quotes (i.e. treat \"hello world\" as one token),但用NSIS的方式。希望没有任何外部插件。

如何根据空格拆分字符串,但将引号子字符串作为一个单词进行拆分? 示例: 地点“欢迎来到印度”班加罗尔钱奈"IT城市“迈索尔 它应该存储在ArrayList中 欢迎来到印度班加罗尔Channai IT城市迈索尔

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-10-28 20:27:12

没有插件就没有数组支持,所以我忽略了数组部分。

任何字符串操作都可以使用NSIS中的三个基本字符串函数(StrLen、StrCpy和StrCmp)执行:

代码语言:javascript
复制
!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
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19626228

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档