Regsub 用于 set text [join $text \n] for missing brace error
Regsub use for set text [join $text \n] for missing brace error
我缺少该行的右大括号错误
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 将 { 替换为任何不会引发错误的适当替换,我会收到错误
"Missing close-brace while executing"proc ProcessText {}"
如果我评论 regsub 然后我得到错误
“执行时列表中不匹配的左括号
"join $text \n"
谁能在这里建议我如何在 tcl 中进行同样的操作。
仅供参考:
text 是一个包含大量文本信息的列表,如果我删除 {.它在其他方面不起作用。
正如 Donal 已经感觉到的,变量 text
所持有的值的格式不符合 Tcl 列表,但是 [join]
却希望如此。
您的选择是:
1) 使用 [split]
:
将值转换为 Tcl 列表
join [split $text] \n
2) 使用 [string map]
:
避免转换成列表和 [join]
string map {" " "\n"} $text
(或者使用 [regsub]
如下,如果你不能控制输入中的白色-space扩散)
有时,一个字符串最好只保留一个字符串 ;)
变体
你对 [regsub]
的使用是有问题的,最重要的是,最好使用它一次来实现你的最终目标,而不是在调用 [join]
:
之前清理输入字符串
regsub -all {\s+} $text "\n"
背景
你运行出错是因为你没有将正则表达式({)
中的哨兵{
转义为[regsub]
正确:
regsub -all -- ({) $text {\{} text
这应该是:
regsub -all -- {\{} $text {\{} text
在您的变体中,{
被视为左大括号,实际上在脚本的其余部分中不匹配。
我缺少该行的右大括号错误
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 将 { 替换为任何不会引发错误的适当替换,我会收到错误 "Missing close-brace while executing"proc ProcessText {}"
如果我评论 regsub 然后我得到错误 “执行时列表中不匹配的左括号 "join $text \n" 谁能在这里建议我如何在 tcl 中进行同样的操作。
仅供参考: text 是一个包含大量文本信息的列表,如果我删除 {.它在其他方面不起作用。
正如 Donal 已经感觉到的,变量 text
所持有的值的格式不符合 Tcl 列表,但是 [join]
却希望如此。
您的选择是:
1) 使用 [split]
:
join [split $text] \n
2) 使用 [string map]
:
[join]
string map {" " "\n"} $text
(或者使用 [regsub]
如下,如果你不能控制输入中的白色-space扩散)
有时,一个字符串最好只保留一个字符串 ;)
变体
你对 [regsub]
的使用是有问题的,最重要的是,最好使用它一次来实现你的最终目标,而不是在调用 [join]
:
regsub -all {\s+} $text "\n"
背景
你运行出错是因为你没有将正则表达式({)
中的哨兵{
转义为[regsub]
正确:
regsub -all -- ({) $text {\{} text
这应该是:
regsub -all -- {\{} $text {\{} text
在您的变体中,{
被视为左大括号,实际上在脚本的其余部分中不匹配。