如何获取文件中的特定行并将其添加到数组中?
例如:我想获得200-300行并将其放入数组中。并同时计算文件中的总行数。该文件可能很大。
答案 0 :(得分:5)
File.each_line
是一个很好的参考,但是返回迭代器的变量不是最佳的,因为它留下了打开的文件描述符。该方法可能会被删除。
但是,此方法的yield变量对此有好处:
lines = [] of String
index = 0
range = 200..300
File.each_line(file, chomp: true) do |line|
index += 1
if range.includes?(index)
lines << line
end
end
现在lines
保留range
中的行,而index
是文件中的总行数。
答案 1 :(得分:2)
要防止读取整个文件并为其所有内容分配新数组,可以使用File.each_line迭代器:
lines = [] of String
File.each_line(file, chomp: true).with_index(1) do |line, idx|
case idx
when 1...200 then next # ommit lines before line 200 (note exclusive range)
when 200..300 then lines << line # collect lines 200-300
else break # early break, to be efficient
end
end