我执行以下操作:
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向量))。
答案 0 :(得分:1)
没有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]
字典可以根据方式以不同方式构建 你需要访问你的矩阵。