我正在丢失该行的右括号错误
set text [join $text \n]
我的整个代码是
proc ProcessText { text} {
regsub -all -- ({) $text {\{} text
set text [join $text \n]
return $text
}
##it starts from here
set text "{a b c"
puts $text
puts [ProcessText $text]
如果我正在使用regsub将{替换为不会引发错误的任何适当替换,我会收到错误消息 “执行过程中缺少大括号” procProcessText {}”
如果我评论regsub,那么我会报错 “执行时列表中无与伦比的大括号 “加入$ text \ n” 有人可以在这里建议我如何在tcl中进行相同的操作。
仅供参考: 文本是一个包含很多文本信息的列表,如果我删除了{,其中也有一个{。否则就不行了。
答案 0 :(得分:3)
就像Donal所感觉到的那样,变量text
所保存的值的格式不符合Tcl列表,而[join]
则期望这种格式。
您的选择是:
1)使用[split]
将值转换为Tcl列表:
join [split $text] \n
2)避免使用[string map]
完全转换为列表和[join]
:
string map {" " "\n"} $text
(或者,如果您无法控制输入中的空格扩散,请按照以下说明使用[regsub]
有时候,字符串最好只保留一个字符串;)
您对[regsub]
的使用是有问题的,最重要的是,最好一次使用它来达到最终目的,而不是在调用[join]
之前先清理输入字符串:
regsub -all {\s+} $text "\n"
您遇到错误是因为您没有正确地将正则表达式{
到({)
中的前哨[regsub]
进行转义:
regsub -all -- ({) $text {\{} text
这应该是:
regsub -all -- {\{} $text {\{} text
在您的变体中,{
被认为是一个开括号,实际上在脚本的其余部分中不匹配。