Working with a list template with values ​​surrounded by {}

I have data {} {abc}, {abc} {}or {abc} {def}, and I want to write it to 2 variables. I tried:

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

However, it {}does not get the index.

+3
source share
4 answers

From the lindex manual , my focus:

When presenting one index, the lindex command treats the list as a Tcl list and returns an index'th element from it ( 0 refers to the first element of the list )

So, you will need to use something more:

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

And if you are using Tcl 8.5 or later, you can use lassign:

foreach {fname} <program to get values> {
    lassign $fname dfrom rname
    print "fname- $fname"
    print "dfrom- $dfrom"
    print "rname- $rname"
}
+2
source

Tcl lists have indexes starting at zero.

Tcl 8.5

lassign $fname dfrom rname
0

8.4 , :

foreach {dfrom rname} $data { }

foreach , .

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

0

All Articles