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"
}