【发布时间】:2021-11-04 08:44:50
【问题描述】:
我想依次更新一系列文件,从一个tmp文件distTmp.RST依次更新为dist1.RST、dist2.RST等。
对我来说,vmd文本界面中的fileutil包不起作用如下:
我的 tcl 代码(add.tcl):
package require fileutil
set F 20.5
set Ff ""
for {set f 0} {$f < 70} {incr f} {
set F [expr {$F+1}]
lappend Ff $F
}
puts $Ff
for {set f 0} {$f < 70} {incr f} {
set M [lindex $Ff $f]
set N [expr {$f+1}]
package require fileutil
::fileutil::updateInPlace distTmp.RST {string map {WWW $M}}
::fileutil::cat dist$N.RST
}
========
发生的错误是
vmd > source add.tcl
can't find package fileutil
vmd >
========
另外,当我不使用“fileutil”包时,我的脚本如下:
set F 20.5
set Ff ""
for {set f 0} {$f < 70} {incr f} {
set F [expr {$F+1}]
lappend Ff $F
}
puts $Ff
for {set f 0} {$f < 70} {incr f} {
set M [lindex $Ff $f]
set N [expr {$f+1}]
set dat [open "distTmp.RST" r]
set out [open "dist$N.RST" w]
while {[gets $dat line] >= 0} {
set newline [string map {WWW $$M} $line]
puts $out $newline
}
}
======
但是,在字符串中调用变量$M有问题,我需要的输出文件如下:
(base) [Prathit@master]~/APP/OnlyAPP/AlphaFold2/770_res/Charmm-Gui_Dimer-units/E2-E2_3222212666/charmm-gui-3222212666/amber/RSTfiles_Equil>head -n +4 dist1.RST dist2 .RST
=> dist1.RST
&rst iat = -1, -1, r2 = $$M, r2a = $$M,
==> dist2.RST
&rst iat = -1, -1, r2 = $$M, r2a = $$M,
===========
在上面,$$M 应该依次是 21.5、22.5 等等......
请告诉我可能的解决方案。
【问题讨论】:
-
string map [list WWW $M] $line所以变量得到评估? -
一旦你理解了解决方案,你就会明白 Tcl 中的引用:)
标签: tcl