如何在tcl的字符串映射中使用左花括号和右花括号

时间:2019-05-07 15:02:58

标签: string dictionary tcl mql tclsh

我正在尝试在脚本中使用字符串映射功能。我有一个属性,其值如下所示:

{{1234||}{2345||}}

我想用空白字符和||}替换所有开头的大括号  逗号,。如何使用地图功能?

如何摆脱上面的括号?

3 个答案:

答案 0 :(得分:1)

manual应该足够清楚,但以防万一...

set s "{{1234||}{2345||}}"
set result [string map {"{" "" "||}" ","} $s]
puts $result
# 1234,2345,}

string map包含一个包含成对字符串的列表。在该列表中从左到右的每一对中,第一对将替换为第二对。

因此,在上文中,第一个{将被替换为空白,并且完成后,||}将被替换为,。我使用引号是因为括号在Tcl中用于报价,如果您不太习惯Tcl中的报价机制,它可能无法始终如您所愿地工作。


尽管我不太确定以上是否是您要寻找的结果?如果要删除多余的string trimright,则可以使用,},这将删除所有,}的结尾字符:

string trimright $result ",}"
# 1234,2345

此外,您还可以使用反斜杠(\)在Tcl中转义字符。

答案 1 :(得分:0)

最好的解决方案是如果要替换字符串的一部分,请使用regsub

set str {{1234||}{2345||}}
regsub -all {\{} $str "" str
regsub -all {\|\|\}} $str "," str
puts $str

答案 2 :(得分:0)

您始终可以使用list(或其他列表操作)来建立映射项。这是使用交互式终端的好时机。

% list "{" "" "||}" ","
\{ {} ||\} ,

现在我们知道文字列表的样子,我们可以在脚本中使用它:

set s "{{1234||}{2345||}}"
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{{1234||}{2345||}}” --> “1234,2345,}”

当然,可能是您在告诉我们加引号的输入值:

set s {{1234||}{2345||}}
set result [string map {\{ {} ||\} ,} $s]
puts "“$s” --> “$result”"
# “{1234||}{2345||}” --> “1234,2345,”

(Unicode引号在测试时用于分隔输出字符串很有用,因为它们不会误认为输入值。)