Tcl error : wrong # args: should be "set varName ?newValue?"
Tcl error : wrong # args: should be "set varName ?newValue?"
我尝试 运行 以下 Tcl 脚本并得到错误:错误的 # args: 应该是 "set varName ?newValue?"
这是什么意思?
注意:该脚本包含特定于 VMD 程序的术语,例如 mol 和 resid。请无视。
#count water molecules between chain A and chain C or between #chain B and chain C
set input_file [open ./name_3_pdb_chain_renamed.dat r]
set data [read $input_file]
set data [split $data "\n"]
close $input_file
set chain_list [lindex $data 0]
cd 7_count_water
set outfile [open count_water3.dat w]
set chain_compare ""
set pdblen [llength $chain_list]
for {set i 0} {$i<$pdblen} {incr i} {
set pid [lindex [lindex $chain_list $i] 0]
set len [llength [lindex $chain_list $i]]
mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb
mol modstyle 0 top NewCartoon
if {$len==4} {
set chain_compare [lappend chain_compare $pid]
}
set 11 [atomselect top all]
set mid [ molid]
mol delete $mid
}
set lll [llength $chain_compare]
for {set j 0} {$j< $lll} {incr j} {
set pid [lindex $chain_compare $j]
mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb
set 11 [atomselect top "chain A and name CA"]
set res_len [llength [ get resid]]
set res_id [ get resid]
#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$ag get resid]]
set ag_id [$ag get resid]
#loop water between chain A and chain C
for {set k 0} {$k<$res_len} {incr k} {
set water_around_a [atomselect top "{resname HOH and {within 5.0 of {chain A and resid [lindex $res_id $k]} and {within 5.0 of chain C}}} "]
set water_around_a_resid [$water_around_a get resid]
set water_around_a_resname [$water_around_a get resname]
#loop antigen residues around water
for {set g 0} {$g < $ag_len} {incr g} {
set ag_around_water [atomselect top "{chain C and resid [lindex $ag_id $g] and {within 5.0 of {resname HOH and {within 5.0 of {chain A and resid [lindex $res_id $k]}}}}} "]
set ag_around_water resid [$ag_around_water get resid]
set ag_around_water_resname [$ag_around_water get resname]
puts $outfile "$pid [lindex $res_id $k] [lindex [ get resname] $k] $ag_around_water_resname A: $water_around_a_resname"
}
}
set b11 [atomselect top "chain B and name CA"]
set b_res_len [llength [$b11 get resid]]
set b_res_id [$b11 get resid]
#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$ag get resid]]
set ag_id [$ag get resid]
for {set k 0} {$k<$res_len} {incr k} {
set water_around_b [atomselect top "{resname HOH and {within 5.0 of {chain B and resid [lindex $b_res_id $k]} and {within 5.0 of chain C}}} "]
set water_around_b_resid [$water_around_b get resid]
set water_around_b_resname [$water_around_b get resname]
#loop antigen residues around water
for {set g 0} {$g < $ag_len} {incr g} {
set ag_around_water [atomselect top "{chain C and resid [lindex $ag_id $g] and {within 5.0 of {resname HOH and {within 5.0 of {chain B and resid [lindex $b_res_id $k]}}}}} "]
set ag_around_water resid [$ag_around_water get resid]
set ag_around_water_resname [$ag_around_water get resname]
puts $outfile "$pid [lindex $b_res_id $k] [lindex [$b11 get resname] $k] $ag_around_water_resname A: $water_around_b_resname"
}
}
}
close $outfile
cd ..
谢谢
第 set ag_around_water resid [$ag_around_water get resid]
行需要更改。您可能需要 ag_around_water_resid
。
该消息:
wrong # args: should be "set varName ?newValue?"
是一个标准错误,当内置命令获取错误数量的参数进行评估时抛出。在这种情况下,它来自 set
命令,表示您已经单独说 set
,或者给它提供了两个以上的参数。
如果您检查堆栈跟踪(通常在使用标准 tclsh
时打印错误消息,尽管它可以随用户代码更改)然后您会被告知问题发生的位置。 但是,在这种情况下,我们可以查看并看到靠近脚本底部的这一行:
set ag_around_water resid [$ag_around_water get resid]
变量名中似乎是 space 而不是下划线。现在,spaces 在变量名中是合法的,但是变量名需要被引用,这会有点烦人。通常最好避免那样使用它们。如果不加引号,Tcl 就不知道那是一个词;通用解析层决定那里确实有四个单词(set
、ag_around_water
、resid
和复杂的 [$ag_around_water get resid]
)并告诉 set
处理它,这不喜欢。
记住,Tcl 的通用句法解析首先发生,在命令参数被语义解释之前。 总是。
我尝试 运行 以下 Tcl 脚本并得到错误:错误的 # args: 应该是 "set varName ?newValue?"
这是什么意思?
注意:该脚本包含特定于 VMD 程序的术语,例如 mol 和 resid。请无视。
#count water molecules between chain A and chain C or between #chain B and chain C
set input_file [open ./name_3_pdb_chain_renamed.dat r]
set data [read $input_file]
set data [split $data "\n"]
close $input_file
set chain_list [lindex $data 0]
cd 7_count_water
set outfile [open count_water3.dat w]
set chain_compare ""
set pdblen [llength $chain_list]
for {set i 0} {$i<$pdblen} {incr i} {
set pid [lindex [lindex $chain_list $i] 0]
set len [llength [lindex $chain_list $i]]
mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb
mol modstyle 0 top NewCartoon
if {$len==4} {
set chain_compare [lappend chain_compare $pid]
}
set 11 [atomselect top all]
set mid [ molid]
mol delete $mid
}
set lll [llength $chain_compare]
for {set j 0} {$j< $lll} {incr j} {
set pid [lindex $chain_compare $j]
mol load pdb ../2_chain_rename/${pid}_chain_revised.pdb
set 11 [atomselect top "chain A and name CA"]
set res_len [llength [ get resid]]
set res_id [ get resid]
#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$ag get resid]]
set ag_id [$ag get resid]
#loop water between chain A and chain C
for {set k 0} {$k<$res_len} {incr k} {
set water_around_a [atomselect top "{resname HOH and {within 5.0 of {chain A and resid [lindex $res_id $k]} and {within 5.0 of chain C}}} "]
set water_around_a_resid [$water_around_a get resid]
set water_around_a_resname [$water_around_a get resname]
#loop antigen residues around water
for {set g 0} {$g < $ag_len} {incr g} {
set ag_around_water [atomselect top "{chain C and resid [lindex $ag_id $g] and {within 5.0 of {resname HOH and {within 5.0 of {chain A and resid [lindex $res_id $k]}}}}} "]
set ag_around_water resid [$ag_around_water get resid]
set ag_around_water_resname [$ag_around_water get resname]
puts $outfile "$pid [lindex $res_id $k] [lindex [ get resname] $k] $ag_around_water_resname A: $water_around_a_resname"
}
}
set b11 [atomselect top "chain B and name CA"]
set b_res_len [llength [$b11 get resid]]
set b_res_id [$b11 get resid]
#residue length for chain C
set ag [atomselect top "chain C and name CA"]
set ag_len [llength [$ag get resid]]
set ag_id [$ag get resid]
for {set k 0} {$k<$res_len} {incr k} {
set water_around_b [atomselect top "{resname HOH and {within 5.0 of {chain B and resid [lindex $b_res_id $k]} and {within 5.0 of chain C}}} "]
set water_around_b_resid [$water_around_b get resid]
set water_around_b_resname [$water_around_b get resname]
#loop antigen residues around water
for {set g 0} {$g < $ag_len} {incr g} {
set ag_around_water [atomselect top "{chain C and resid [lindex $ag_id $g] and {within 5.0 of {resname HOH and {within 5.0 of {chain B and resid [lindex $b_res_id $k]}}}}} "]
set ag_around_water resid [$ag_around_water get resid]
set ag_around_water_resname [$ag_around_water get resname]
puts $outfile "$pid [lindex $b_res_id $k] [lindex [$b11 get resname] $k] $ag_around_water_resname A: $water_around_b_resname"
}
}
}
close $outfile
cd ..
谢谢
第 set ag_around_water resid [$ag_around_water get resid]
行需要更改。您可能需要 ag_around_water_resid
。
该消息:
wrong # args: should be "set varName ?newValue?"
是一个标准错误,当内置命令获取错误数量的参数进行评估时抛出。在这种情况下,它来自 set
命令,表示您已经单独说 set
,或者给它提供了两个以上的参数。
如果您检查堆栈跟踪(通常在使用标准 tclsh
时打印错误消息,尽管它可以随用户代码更改)然后您会被告知问题发生的位置。 但是,在这种情况下,我们可以查看并看到靠近脚本底部的这一行:
set ag_around_water resid [$ag_around_water get resid]
变量名中似乎是 space 而不是下划线。现在,spaces 在变量名中是合法的,但是变量名需要被引用,这会有点烦人。通常最好避免那样使用它们。如果不加引号,Tcl 就不知道那是一个词;通用解析层决定那里确实有四个单词(set
、ag_around_water
、resid
和复杂的 [$ag_around_water get resid]
)并告诉 set
处理它,这不喜欢。
记住,Tcl 的通用句法解析首先发生,在命令参数被语义解释之前。 总是。