2014-02-06 2 views
3

У меня есть данные, которые есть {} {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

Списки Tcl имеют индексы, начинающиеся с нуля.

Вы бы сделать это в Tcl 8,5

lassign $fname dfrom rname 
0

Если вы находитесь в 8.4 или более ранней версии, сделайте следующее:

foreach {dfrom rname} $data { } 

Еогеасп будет делать на основе задания списка, так что вам даже не нужно ничего тело петли.

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

Смежные вопросы