我有一个大文本文件(56MB,7500000行)。如果我一次读取整个文件,我会收到OutofMemory
错误。我想一次读20000行,做东西,然后继续。如何从特定行开始读取20000行?
答案 0 :(得分:0)
IO#each_line是你的朋友。
file = File.new('filename', 'r') # or whatever
file.each_line do |line|
# do something with a line
end
它会有效地读取行,而不是将整个文件加载到内存中。
答案 1 :(得分: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会告诉您已调用的次数。设置lineno会手动将当前行号设置为给定值。引用是here。您可以尝试在上面的循环中添加“puts file.lineno”以查看它是如何工作的。
答案 2 :(得分:0)
也许......使用简单的unix命令。例如 sed 从5000到10000行
%x{sed -n 5000,10000p ./file_you_want}.each_line do |line|
# do with lines
end