Tcl 映射后如何写入输出文件(全局)
我在tcl中尝试了一个程序,将mstate.txt中的id号映射为instit.map.gz中的名称,并将名称打印到另一个名为file.txt的文件中 但问题是如何将fp3声明为全局变量。因为每次调用过程时,file.txt文件都被重写了,这是我不想要的Tcl 映射后如何写入输出文件(全局),tcl,Tcl,我在tcl中尝试了一个程序,将mstate.txt中的id号映射为instit.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 "
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
我不太确定我是否完全理解您的问题,但要在Tcl命令中使用全局变量,您需要使用
global
命令:
proc mapping {n} {
global fp3
...
您可以将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
这是正确的,不过在这种情况下,我可能更愿意将频道作为一个参数传递出去。@DonalFellows:我也是,但OP似乎要求这样的东西。