我执行以下操作:
set q [list Phi1 Phi2 Phi3 Phi4 Phi5 Phi6 Phi7 Phi8 Phi9 Phi10 Phi11 Phi12 Phi13 Phi14 Phi15 Phi16 Phi17 Phi18 Phi19 Phi20 Phi21 Phi22 Phi23 Phi24 Phi25 Phi26 Phi27]
然后我定义我的列表(从 Phi1 到 Phi27)
foreach l $q {
for {set i 5} {$i<17} {incr i 1} {
set fx1 [nodeEigenvector $i 1 1]
set fy1 [nodeEigenvector $i 1 2]
set frot1 [nodeEigenvector $i 1 3]
lappend $l [list $fx1]
lappend $l [list $fy1]
lappend $l [list $frot1]
}
}
然后我想将这些向量保存到一个文件中:
foreach aer $q {
for {set re 1} {$re<27} {incr re 1} {
set Mode $aer
set fo [open Modd.out a]
puts $fo [list get $Mode]
puts [list get $aer]
close $fo
}
}
这行不通。我得到一个文件,其中包含"获取 Phi1"(27 次...)到 Phi27 的列表......有趣的是,当我键入命令puts [list get $Phi1]
时,我确实在屏幕上按预期获取数据。有人可以帮助我吗?如果有更简单的方法,我也想知道!(我只是尝试构建、填充,然后保存一个矩阵(27 向量))。
没有list get
命令。您可以通过执行[set $aer]
来获取列表的值。
[set varname]
返回 varname
的值,所以如果aer
设置为 Phi1
,[set $aer]
将返回 Phi1
的值。
每次打开和关闭文件效率非常低,所以我也修复了它。
所以最后一个循环变成:
set fo [open Modd.out a] ; # or mode w
foreach aer $q {
puts $fo [set $aer]
puts [set $aer]
}
close $fo
您可以重写此命令以使用 dict 命令。
set phi [dict create]
foreach l $q {
for {set i 5} {$i<17} {incr i 1} {
set fx1 [nodeEigenvector $i 1 1]
set fy1 [nodeEigenvector $i 1 2]
set frot1 [nodeEigenvector $i 1 3]
dict lappend phi $l [list $fx1 $fy1 $frot1]
# or another way:
# dict lappend phi $l $fx1 $fy1 $frot1
}
}
puts $phi
puts [dict get $phi Phi2]
字典可以以不同的方式构建,具体取决于您需要访问您的矩阵。