使用{}包围的值的列表模式

时间:2014-02-06 00:32:09

标签: tcl

我的数据是{} {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"
}

但是,{}没有获得索引。

4 个答案:

答案 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