我是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""