我有一个大文本文件(56MB,7500000 行)。OutofMemory
如果我一次读取整个文件,我会收到错误消息。我想一次阅读 20000 行,做一些事情,然后继续。如何从特定行开始读取 20000 行?
问问题
158 次
3 回答
0
IO#each_line是你的朋友。
file = File.new('filename', 'r') # or whatever
file.each_line do |line|
# do something with a line
end
它将有效地读取行,而不是将整个文件加载到内存中。
于 2013-09-26T10:49:34.423 回答
0
也许......使用简单的unix命令。例如sed从 5000 到 10000 行
%x{sed -n 5000,10000p ./file_you_want}.each_line do |line|
# do with lines
end
于 2013-09-26T13:13:26.100 回答
0
此代码符合您的需要,读取一系列最大行,处理它们,清除它们并循环遍历 eof。重置数组是消除 OutofMemory 情况的关键。
class ReadLoop
lines = Array.new # Array to hold the next series of lines
count = 0 # Count of lines read into the current series
max = 3 # Maximum number of lines
file = File.new('yourfilenamehere', 'r') # or whatever
file.each_line do |line|
count += 1
lines << line
if count == max || file.eof
then
puts "Next series of lines:"
puts lines
count = 0
lines = Array.new
end
end
end
直接回答您的问题的另一个答案是使用gets (each_line) 和lineno。查询 lineno 会告诉你 get 被调用的次数。设置 lineno 手动将当前行号设置为给定值。参考在这里。您可以尝试在上面的循环中添加“puts file.lineno”,看看它是如何工作的。
于 2013-09-26T13:02:04.000 回答