我在tcl中尝试了一个程序来映射mstate.txt中的id号,其名称在instID.map.gz中,并在名称为file.txt的其他文件中打印名称 但问题是如何将fp3声明为全局变量。因为每次我调用过程时,文件file.txt都被写了,我不想要。
set fp2 [open mstate.txt r]
set fp3 [open file.txt w]
proc mapping {n} {
set b [lindex $n 0]
set pipeline [open "| zcat instID.map.gz"]
set file_data [read $pipeline]
set data [split $file_data "\n"]
foreach line1 $data {
set column2 [lindex $line1 1]
set column1 [lindex $line1 0]
if {[string equal $column2 $b]} {
puts $fp3 " $column1 [lrange $n 2 end] "
}
}
}
while {[gets $fp2 line] >=0} {
mapping $line
}
close $fp2
close $fp3
答案 0 :(得分:1)
我不太确定我完全理解你的问题,但是要在Tcl命令中使用全局变量,你需要使用global
命令:
proc mapping {n} {
global fp3
...
答案 1 :(得分:0)
您可以将fp3作为第二个参数传递并在内部访问它。无需将其设置为全局变量。
set fp2 [open mstate.txt r]
set fp3 [open file.txt w]
proc mapping {n fp3} {
set b [lindex $n 0]
set pipeline [open "| zcat instID.map.gz"]
set file_data [read $pipeline]
set data [split $file_data "\n"]
foreach line1 $data {
set column2 [lindex $line1 1]
set column1 [lindex $line1 0]
if {[string equal $column2 $b]} {
puts $fp3 " $column1 [lrange $n 2 end] "
}
}
}
while {[gets $fp2 line] >=0} {
mapping $line $fp3
}
close $fp2
close $fp3