我的数据是{} {abc}
,{abc} {}
或{abc} {def}
,我想在2个变量中捕获它。我试过了:
foreach {fname} <program to get values> {
set dfrom [lindex $fname 1]
set rname [lindex $fname 2]
print "fname- $fname"
print "dfrom- $dfrom"
print "rname- $rname"
}
但是,{}
没有获得索引。
答案 0 :(得分:2)
来自manual about lindex,强调我的:
当使用单个索引时,lindex命令将列表视为Tcl列表并从中返回index'th元素( 0指向列表的第一个元素)
所以你必须使用更像这样的东西:
foreach {fname} <program to get values> {
set dfrom [lindex $fname 0]
set rname [lindex $fname 1]
print "fname- $fname"
print "dfrom- $dfrom"
print "rname- $rname"
}
如果您使用的是Tcl 8.5或更新版本,则可以使用lassign
:
foreach {fname} <program to get values> {
lassign $fname dfrom rname
print "fname- $fname"
print "dfrom- $dfrom"
print "rname- $rname"
}
答案 1 :(得分:0)
Tcl列表的索引从零开始。
您可以在Tcl 8.5
中执行此操作lassign $fname dfrom rname
答案 2 :(得分:0)
如果你在8.4或更早,请执行:
foreach {dfrom rname} $data { }
foreach将执行基于列表的赋值,因此您甚至不需要循环体中的任何内容。
答案 3 :(得分:0)
如果结果成对,你可以:
To save an array to a file:
foreach {key value} [array get myArray] {
puts $myFile [list set myArray($key) $value]
}
这将是一个良好的开端,例子来自:http://wiki.tcl.tk/1018
然而,如果你只想使用一个fname变量来收集结果,你需要记住列表的索引从0开始。
foreach {fname} <program to get values> {
set dfrom [lindex $fname 1]
set rname [lindex $fname 2]
print "fname- $fname"
print "dfrom- $dfrom"
print "rname- $rname"
}
但是,如果您收到嵌套列表,则需要首先进入索引列表0,然后搜索
foreach {fname} <program to get values> {
set dfrom [lindex $fname 0 0]
set rname [lindex $fname 0 1]
print "fname- $fname"
print "dfrom- $dfrom"
print "rname- $rname"
}
要查找lindex信息的字体:http://wiki.tcl.tk/1481