До сих пор я читал ваши комментарии, и, если я правильно вас понял, ваш файл входных данных содержит 6 (или 9, в зависимости от того, какой комментарий) полей данных в строке, разделенных пробелами.Вы хотите использовать регулярное выражение для разбивки их на 6 (или 9) массивов или списков, по одному на каждое поле данных.
Если это так, я бы попробовал что-то вроде этого (используя списки):
set f [open $filename]
while {[gets $f line] > -1} {
# Process lines
if {[regexp {(\S+) (\S+) (\S+) (\S+) (\S+) (\S+)} $line -> name source drain gate bulk inst]} {
lappend nameL $name
lappend sourceL $source
lappend drainL $drain
lappend gateL $gate
lappend bulkL $bulk
lappend instL $inst
}
}
close $f
Теперь у вас должен быть набор из 6 списков, по одному на поле, с одной записью в списке для каждого элемента в вашем входном файле.Например, для доступа к i-му имени вы берете $nameL[$i
].
Если (как я подозреваю) ваша основная цель - получить параметры устройства с именем "foo", вы бы использовали такую структуру:
set name "foo"
set i [lsearch $nameL $name]
if {$i != -1} {
set source $sourceL[$i]
} else {
puts "item $name not found."
set source ''
# or set to 0, or whatever "not found" marker you like
}