如何在 TCL 列表中获取"multi word"、"mono word"和空字符串?我得到了一个"non uniform"卷曲支撑格式字符串的列表



我是TCL的新手。阅读一些手册,我试图修改我在这里和那里找到的一些脚本,到目前为止,我一直很好地管理我的需求......直到今天。

我面临着一个(可能)愚蠢的问题(对于 PRO),但对我来说不是微不足道的,特别是因为我仍然没有完全掌握概念(字符串、数组等......

我的情况是这样的:

我有一个第三方应用程序,当我请求字符串时会返回字符串。这些字符串可以是多个单词(空格 ' ' 分隔)、只有一个单词或空字符串。 这些字符串是不可预测的,我无法从上述 3 种类型中知道任何被问到的字符串的类型。

一个典型的执行示例是这样的:

list [format "%s" [lindex [some_function 0] 0] [format "%s" [lindex [some_function 1] 0] [format "%s" [lindex [some_function 2] 0] [format "%s" [lindex [some_function 3] 0]

可能不是最佳的,但它返回以下内容:(多字,空,1字,多字)

{Hi you} {} finishing {this is string 3}

这种格式似乎还可以,但它足够不规则,以至于事后会破坏我的 swift 解析器(在处理它时,将 4 个字符串分成 4 个成员的数组)

理想情况下,我希望在所有返回的字符串中都包含卷曲括号,无论是多字、单字还是空字符串。 不知何故,在处理单字字符串时"TCL 是不规则的"......我怎样才能实现这样理想情况?

{Hi you} {} {finishing} {this is string 3}

有卷曲括号,因为它是典型的分隔符/运算符 TCL 返回,但我也可以这样的东西:

"嗨,你" " "正在完成" "这是字符串 3">

我应该如何重写我的 4 个示例字符串的原始命令?

提前问候和感谢。

您不应该通过其他工具解析 tcl 列表。它很容易出错,因为 tcl 列表可以采用各种格式,尤其是转义。

如果您需要通过其他工具处理 tcl 列表,则应将其转换为此工具可读的某种格式。例如,json或类似的东西。

但是,您可以将列表转换为您描述的简单格式。例如:

set mylist {{Hi you} {} finishing {this is string 3}}
set out "{[join $mylist "} {"]}"
puts $out

这将为您提供:

{Hi you} {} {finishing} {this is string 3}

但是,您将与值中的{}符号发生冲突。

或:

set mylist {{Hi you} {} finishing {this is string 3}}
set out ""[join $mylist "" ""]""
puts $out

这将为您提供:

"Hi you" "" "finishing" "this is string 3"

现在,您将与值中的"符号冲突。

因此,这些解决方案并不完美。

proc quote_words {mylist} {
join [lmap elem $mylist {format {"%s"} [string map {{"} {"}} $elem]}]
}

然后

quote_words [list foo "" bar {a string "with quotes"}]

给你

"foo" "" "bar" "a string "with quotes""

最新更新