我的问题是:我有一些非常大的数据文件(总计几千兆字节),除了实际数据外,还包括文件开头的一些注释行。
所以他们看起来像这样:
# This is a file containing data.
# Here's how to use it:
# ...
# Now, let's get to the actual data:
DATA DATA DATA
我要完成的任务是尽快删除这些文件中的注释,因为我用它来将它们摄取到我的数据库中的工具无法处理注释。
我目前的方法是:
# For each data file...
system "sed '/^\\#/d' #{filename} > #{filename}.tmp"
system "mv #{filename}.tmp #{filename}"
这样可行,但总共需要1个小时,因为文件太大了。我的假设是必须有一种更有效的方法来做到这一点,因为我确信评论仅在文件的开头 ,所以不需要为整个文件搜索它们。
我不关心解决方案是使用纯Ruby还是像上面那样的shell命令,只要它比当前方法运行得快得多。
答案 0 :(得分:0)
嗯。你的方法很健全。分离系统工具是大文件的一个很好的策略。
我想知道这么简单的转码怎么会这么慢。有些事要探讨......
答案 1 :(得分:0)
是的,你可以这样快速地做到这一点,我想你只想让#离开,否则适应但请记住,写入的字符串需要与字符串读取完全一样长。
File.open('big.txt', 'rb+') do |file|
loop do
line = file.readline
if (line[0]=='#')
file.seek(-line.length, IO::SEEK_CUR)
file.write line.sub!(/#/," ")
else
break
end
end
end