Вы можете сделать что-то подобное файлу, которое пропустит первые N строк:
SkipFile.open("/tmp/frarees") do |ln|
puts ln # "more here.." and so on
end
puts SkipFile.new("/tmp/frarees").readline # "more here.."
Вот так:
class SkipFile
def self.open(fn, &block)
sf = SkipFile.new(fn)
return sf unless block
sf.each(&block)
end
def initialize(fn)
@f = File.open(fn)
skip = @f.readline.to_i # Skip N lines as prescribed by the file
skip.times { @f.readline } # this could be done lazily
end
def each(&block)
@f.each(&block)
end
def readline
@f.readline
end
end
Легко сделать, если вы просто хотите перебрать строки файла. Однако становится утомительно, если вы хотите точно имитировать интерфейс File
или IO
(но см. Delegate
) и особенно если вы хотите поддержать перемотку назад к фиктивному началу вашего файла .