如何使用tcl逐行读取大文件?

时间:2015-06-30 13:05:25

标签: file tcl

我使用while循环编写了一段代码,但是逐行读取文件需要花费太多时间。有人能帮帮我吗? 我的代码:

   set a [open myfile r]              
   while {[gets $a line]>=0} {   
     "do somethig by using the line variable" 
   }

2 个答案:

答案 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