我使用while循环编写了一段代码,但是逐行读取文件需要花费太多时间。有人能帮帮我吗? 我的代码:
set a [open myfile r]
while {[gets $a line]>=0} {
"do somethig by using the line variable"
}
答案 0 :(得分:6)
代码看起来很好。它非常快(如果您使用的是足够新版本的Tcl;从历史上看,有一些TLC的小版本存在缓冲管理问题),并且您是一次读取一行的。
如果你可以一次读取更大的数量,它会快一点,但是你需要有足够的内存来保存文件。把它放在上下文中,几百万行的文件通常没问题;现代计算机可以很好地处理这类事情:
set a [open myfile]
set lines [split [read $a] "\n"]
close $a; # Saves a few bytes :-)
foreach line $lines {
# do something with each line...
}
答案 1 :(得分:0)
如果它确实是一个大文件,则应执行以下操作以一次仅读取一行。使用您的方法会将全部内容读入ram。
https://www.tcl.tk/man/tcl8.5/tutorial/Tcl24.html
#
# Count the number of lines in a text file
#
set infile [open "myfile.txt" r]
set number 0
#
# gets with two arguments returns the length of the line,
# -1 if the end of the file is found
#
while { [gets $infile line] >= 0 } {
incr number
}
close $infile
puts "Number of lines: $number"
#
# Also report it in an external file
#
set outfile [open "report.out" w]
puts $outfile "Number of lines: $number"
close $outfile