我遇到麻烦从字符串中取出一些部分。
这是我的代码:
set top [layout peek $::openedFiles($key) -topcell]
set dim [layout peek $::openedFiles($key) -bbox $top]
# yields output "{name{x1 y1 x2 y2}}"
set coord [split $dim " "]
set x1 [lindex $coord 0]
set x2 [lindex $coord 2]
set y1 [lindex $coord 1]
set y2 [lindex $coord 3]
当我调用命令set dim [layout peek $::openedFiles($key) -bbox $top]
时,我从加载的文件中获取尺寸。这些尺寸是坐标。输出始终如下:"{name {x1 y1 x2 y2}}"
。
例如:{test {0 0 100 100}}
我想从字符串中取出四个坐标,这样我就可以将它们放在一个数组中。
我尝试根据空格分割字符串,但没有成功。 (继续得到这个error: can't read "coord\{clock \{0 0 99960 99960\}\}": no such variable
)
有人得到了一些想法吗?
答案 0 :(得分:4)
如果您使用的是最近的Tcl,或者使用相应包装的较旧的Tcl,抱歉,我记不起细节;让我知道如果你想让我去挖掘它们 - 那么你可以做到
set dim [layout peek $::openedFiles($key) -bbox $top]
lassign $dim firstBit coords
lassign $coords x1 x2 y1 y2
旧版本,没有扩展程序,
set dim [layout peek $::openedFiles($key) -bbox $top]
set coords [lindex $dim 1]
set x1 [lindex $coords 0]
# etc.
修改强>
事实证明[layout peek...]
的工作方式略有不同,因此最终的工作代码是
set dim [layout peek $::openedFiles($key) -bbok $top]
set temp [lindex $dim 0]
set coords [lindex $temp 1]
set x1 [lindex $coords 0]
set x2 [lindex $coords 1]
set y1 [lindex $coords 2]
set y2 [lindex $coords 3]
OP正在使用Tcl8.4,没有TclX。
可能有改进变量名称的余地,但是......
答案 1 :(得分:0)
您可以使用正则表达式从该字符串中提取所有数字,然后照常分配:
# Assume dim = "{test {0 0 100 100}}"
set coord [regexp -inline -all {\d+} $dim]; # coord is now a list: "0 0 100 100"
set x1 [lindex $coord 0]
# set x2, y1, y2, ...