def get_line_from_file(path, line)
result = nil
File.open(path, "r") do |f|
while line > 0
line -= 1
result = f.gets
end
end
return result
end
get_line_from_file("/tmp/foo.txt", 20)
Это хорошее решение, потому что:
- Вы не используете
File.read
, поэтому вы не читаете весь файл в память.Это может стать проблемой, если размер файла составляет 20 МБ, и вы читаете достаточно часто, поэтому GC не успевает за ним. - Вы только читаете из файла до нужной строки.Если ваш файл имеет 1000 строк, то получение строки 20 будет считывать только первые 20 строк в Ruby.
Вы можете заменить gets
на readline
, если хотите вызвать ошибку (EOFError
) вместо возврата за ноль при прохождении за пределами линии.