【问题标题】:Multiple for loops using tcl使用 tcl 的多个 for 循环
【发布时间】:2017-07-21 22:21:43
【问题描述】:

我已经编写了如下所示的脚本,我已经提到了我的预期结果,并且我还提到了我遇到的错误。谁能帮我?

脚本:

for {set x 0} {$x <= 80} {incr x [expr {+20}]} {
    puts "pdb ./$x.a.pdb;"
    puts "pdb ./$x.b.pdb;"
    puts "pdb ./$x.ab.pdb;"
    for {set i 0} {$i < 15} {incr i} {
        puts "A$x = [measure sasa 1.4 [atomselect $i "all"]] >> 1.dat" }
    for {set j 1} {$j < 15} {incr j} {
        puts "B$x = [measure sasa 1.4 [atomselect $j "all"]] >> 1.dat"}
    for {set k 2} {$k < 15} {incr k} {
        puts "AB$x = [measure sasa 1.4 [atomselect $k "all"]] >>1.dat"}
}

我得到的输出:

invalid command name "atomselect"
    while executing
"atomselect $i "all""
    ("for" body line 6)
    invoked from within
"for {set x 0} {$x <= 80} {incr x [expr {+20}]} {
    puts "pdb ./$x.a.pdb;"
    puts "pdb ./$x.b.pdb;"
    puts "pdb ./$x.ab.pdb;"
    for {set i 0} {$i < 15} {incr i..."
    (file "try.tcl" line 1)

预期输出:

 pdb ./0.a.pdb;
 pdb ./0.b.pdb;
 pdb ./0.ab.pdb;
 A0 = [measure sasa 1.4 [atomselect 0 "all"]] >> 1.dat
 B0 = [measure sasa 1.4 [atomselect 1 "all"]] >> 1.dat
 AB0 = [measure sasa 1.4 [atomselect 2 "all"]] >> 1.dat
 pdb ./20.a.pdb;
 pdb ./20.b.pdb;
 pdb ./20.ab.pdb;
 A20 = [measure sasa 1.4 [atomselect 3 "all"]] >> 1.dat
 B20 = [measure sasa 1.4 [atomselect 4 "all"]] >> 1.dat
 AB20 = [measure sasa 1.4 [atomselect 5 "all"]] >> 1.dat
 pdb ./40.a.pdb;
 pdb ./40.b.pdb;
 pdb ./40.ab.pdb;
 A40 = [measure sasa 1.4 [atomselect 6 "all"]] >> 1.dat
 B40 = [measure sasa 1.4 [atomselect 7 "all"]] >> 1.dat
 AB40 = [measure sasa 1.4 [atomselect 8 "all"]] >> 1.dat
 pdb ./60.a.pdb;
 pdb ./60.b.pdb;
 pdb ./60.ab.pdb;
 A60 = [measure sasa 1.4 [atomselect 9 "all"]] >> 1.dat
 B60 = [measure sasa 1.4 [atomselect 10 "all"]] >> 1.dat
 AB60 = [measure sasa 1.4 [atomselect 11 "all"]] >> 1.dat

【问题讨论】:

    标签: tcl


    【解决方案1】:

    这里的 for 循环不是问题:方括号是 Tcl 的“命令替换”语法(如 shell 中的反引号或 $(...))。您需要转义开方括号(和内引号)

    puts "A$x = \[measure sasa 1.4 \[atomselect $i \"all\"]] >> 1.dat" 
    

    或使用format 命令

    puts [format {A%d = [measure sasa 1.4 [atomselect %d "all"]] >> 1.dat} $x $i]
    

    我在第二个示例中使用了大括号来显示 Tcl 的其他非插值引号(如 shell 的单引号)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-08-06
      • 1970-01-01
      • 2020-11-20
      • 1970-01-01
      • 2015-10-22
      • 1970-01-01
      相关资源
      最近更新 更多