【发布时间】:2016-09-01 03:41:03
【问题描述】:
set filePointer [open "fileName" "r"]
set fileWritePointer [open "fileNameWrite" "w"]
set lines [split [read $filePointer] "\n"]
close $filePointer
set length [llength $lines]
for {set i 0} {$i<$length} {incr i} {
if {[regexp "Matching1" $line]} {
puts $fileWritePointer $line
}
if {[regexp "Matching" $line]} {
puts $fileWritePointer $line
}
}
close $fileWritePointer
我一次读取文件的所有行,并用换行符分割它,并在 for 循环内一次读取每一行。
在使用正则表达式对行进行一些语法检查后,我使用以下语法仅将选定的行转储到新文件中。
puts $filePointer $line
我的文件有大约 200 万行代码。 像这样的许多正则表达式匹配大约出现在 1.5 左右。
【问题讨论】:
-
您最好逐行阅读。
while {[gets $fp line]!=-1} { # process here; } close $fp -
@Dinesh:我曾尝试在不使用列表的情况下逐行阅读,但与这种方法相比需要很多时间。 [stackoverflow.com/questions/31139120/…
-
我们需要更多细节。例如,您的意思是您的文件有 200 万行?在哪个操作系统上?需要多少时间?读取部分慢,写入部分还是两者兼而有之?和tcl版本。
-
@ravi507 您链接的帖子说您必须关心内存。你刚刚说你的文件有 200 万行,但没有关于这些行有多长。在您的情况下,您必须考虑内存中包含 200 万个元素的列表。也许您可以尝试检查程序内存打印。
-
@MarioAlexandroSantini :我使用的是 CentOS 版本 5.6(最终版),tcl 版本是 8.5。读部分比写部分快。
标签: tcl