Tcl 使用值被{}包围的列表模式
我的数据是Tcl 使用值被{}包围的列表模式,tcl,Tcl,我的数据是{}{abc},{abc}{}或{abc}{def},我想在两个变量中捕获它。我试过: 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" } foreach{
{}{abc}
,{abc}{}
或{abc}{def}
,我想在两个变量中捕获它。我试过:
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"
}
foreach{fname}{
从[lindex$fname 1]设置数据
设置rname[lindex$fname 2]
打印“fname-$fname”
打印“dfrom-$dfrom”
打印“rname-$rname”
}
但是,
{}
没有获取索引。Tcl列表的索引从零开始
您可以在TCL8.5中实现这一点
lassign $fname dfrom rname
如果您使用的是8.4或更早版本,请执行以下操作:
foreach {dfrom rname} $data { }
foreach将执行基于列表的分配,因此您甚至不需要循环体中的任何内容。我的重点是:
当显示单个索引时,lindex命令将列表视为Tcl列表,并从中返回索引的第个元素(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"
}
如果结果成对出现,您可以:
To save an array to a file:
foreach {key value} [array get myArray] {
puts $myFile [list set myArray($key) $value]
}
这将是一个良好的开端,示例取自:
但是,如果只想使用一个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"
}
foreach{fname}{
从[lindex$fname 1]设置数据
设置rname[lindex$fname 2]
打印“fname-$fname”
打印“dfrom-$dfrom”
打印“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"
}
foreach{fname}{
从[lindex$fname 0]设置数据
设置rname[lindex$fname 0 1]
打印“fname-$fname”
打印“dfrom-$dfrom”
打印“rname-$rname”
}
查找lindex信息的字体:
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"
}