Ruby streaming file line reader
Ruby
def each_file_line(path, encoding: 'UTF-8')
raise ArgumentError, 'path is required' if path.to_s.empty?
count = 0
File.foreach(path, chomp: true, encoding: encoding) do |line|
count += 1
yield line, count
end
count
rescue Errno::ENOENT
raise ArgumentError, %Q(file not found: #{path})
rescue Errno::EACCES
raise ArgumentError, %Q(cannot read: #{path})
end