TCL;使用 foreach 命令保存多个列表



我执行以下操作:

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]

字典可以以不同的方式构建,具体取决于您需要访问您的矩阵。

最新更新