【问题标题】:How to split string in NSIS如何在 NSIS 中拆分字符串
【发布时间】:2014-11-27 06:18:11
【问题描述】:

字符串 "jdbc:postgresql://localhost:5432/DatabaseName"

我的要求是只从上面的字符串中获取 DatabaseName

我尝试了下面的链接,但没有成功。

${Explode} $0 "jdbc:postgresql://localhost:5432/" "$v1" 

它给出错误无效的命令。

http://nsis.sourceforge.net/Explode

如何在 NSIS 语言中实现。因为我对 NSIS 语言不太熟悉。 请做必要的帮助。提前致谢。

【问题讨论】:

标签: nsis


【解决方案1】:

如果您只需要在最后一个 / 之后获取字符串的其余部分,您可以使用一些基本的 NSIS 字符串处理:

Section

StrCpy $0 "jdbc:postgresql://localhost:5432/DatabaseName"
StrCpy $1 0
loop:
    IntOp $1 $1 - 1 ; Character offset, from end of string
    StrCpy $2 $0 1 $1 ; Read 1 character into $2, -$1 offset from end
    StrCmp $2 '/' found
    StrCmp $2 '' stop loop ; No more characters or try again
found:
    IntOp $1 $1 + 1 ; Don't include / in extracted string
stop:
StrCpy $2 $0 "" $1 ; We know the length, extract final string part
DetailPrint "|$2|"

SectionEnd

【讨论】:

  • 谢谢,但是 NSIS 对许多程序员来说很难阅读。如果你能解释一下循环在做什么,这样其他人可以根据他们的需要采用这个例子,那就太好了。例如,这是一个反向 for 循环吗,它是如何找到最后一个 / 的?如果是这样,循环如何抓取每个字符?字符串(字符数组)的行为是否像计数器?
  • @tresf 是的,它一次读取 1 个字符,从末尾开始,并在该字符(在 $2 中)匹配时停止。 StrCpy 当你给它一个负的起始偏移量时会这样做。
【解决方案2】:

你应该试试NSISpcre plugin,也许你需要一些讨厌的正则表达式:p

【讨论】:

  • 我对 NSIS 语言不太熟悉。请建议我如何在我的代码中使用该功能
  • 好吧,我没有使用 Windows 操作系统帮不了你,但你可以尝试创建一个示例 nsis 脚本和插件,并将它与你需要的字符串行一起使用。一旦你有了这个想法,就把它放在你的主脚本中。 NSIS 主要就是这样,学习、尝试、反复试验。
【解决方案3】:

WordFind 函数可以让你做到这一点,看看它的例子

【讨论】:

    猜你喜欢
    • 2011-08-27
    • 1970-01-01
    • 1970-01-01
    • 2011-06-26
    • 2017-06-06
    • 2014-12-25
    • 2013-10-30
    • 2011-03-29
    • 2011-12-05
    相关资源
    最近更新 更多