ОП сказал, что lineno
не работает для них, но я предполагаю, что он не был применен правильно. Существует множество способов достичь того, о чем просит OP, но использование lineno
может помочь вам сократить код без необходимости использования readlines
, что иногда требует слишком много памяти.
Из 1.9.3 документов
f = File.new("testfile")
f.each {|line| puts "#{f.lineno}: #{line}" }
производит:
1: This is line one
2: This is line two
3: This is line three
4: And so on...
Обратите внимание, что это метод, который можно вызывать из файлового объекта, но не объекта, переданного блоку.
2: require 'pry'; binding.pry
=> 3: f.each {|line| puts line.lineno }
[1] pry(#<SomeFile>)> line.lineno
NoMethodError: undefined method `lineno' for #<String:0x00007fa7d682b920>
Вы можете найти тот же пример с идентичным кодом в документах для последней стабильной версии Ruby сегодня (2.5.1).
Итак, если исходить из примера, код может выглядеть как
f = File.new("testfile")
o = File.open("output.txt", w)
f.each do |line|
next if f.lineno == 1
o << line
end