在我的脚本中做了一些其他事情后,我最终得到了一系列在tcl($ sel1,$ sel2,$ sel3,...)中设置的变量,我需要将它们添加到以下行:
set all [::TopoTools::selections2mol "$box $sel1 $sel2 $sel3 $sel4"]
现在,如果我只有四个,那么手工就可以了,但在最终版本中,我会有数百个手工无法做到的。我确定答案是某种循环,但我现在已经考虑过了一些问题而且我无法弄明白。如果我有$ sel1,$ sel2,一直到给定的数字,我将如何以我想要的任何金额显示的格式将它们添加到该行,如图所示,开头的$框?非常感谢你的帮助。
它可能相关也可能不相关,但我在循环中定义变量如下:
set sel$i [atomselect $id all]
答案 0 :(得分:2)
我不熟悉您正在使用的软件,但应该可以在没有太多麻烦的情况下解决这个问题。
如果你把它放在循环中:
set sell$i [atomselect $id all]
append valueStr " " [set sell$i]
(或许,即使它很小C:)
append valueStr " " [set sell$i [atomselect $id all]]
您将获得" $sel1 $sel2 $sel3 $sel4"
被替换为的字符串(记得同时放入$box
)。
使用Tcl 8.5或更高版本,您可以
dict set values $i [atomselect $id all]
在循环内部,它为您提供包含所有值的字典结构,然后使用以下命令创建值序列:
set all [::Topotools::selections2mol [concat $box [dict values $values]]]
根据atomselect
和selections2mol
的输出格式和输入格式,后者在没有微调的情况下实际上可能无法正常工作,但值得一试。
在后一种情况下,您没有获得变量,但每个值都可用作
dict get $values $i
您也可以使用数组执行此操作:
set values($i) [atomselect $id all]
但是你需要在收集值之前对键进行排序,比如
set valueStr [list $box]
foreach key [lsort -integer [array names values]] {
append valueStr " " $values($key)
}