Puede leer el archivo de una vez:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
Cuando el archivo es grande, o puede ser grande, generalmente es mejor procesarlo línea por línea:
File.foreach( 'file.txt' ) do |line|
puts line
end
Sin embargo, a veces desea acceder al identificador de archivo o controlar las lecturas usted mismo:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
En el caso de archivos binarios, puede especificar un separador nulo y un tamaño de bloque, así:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
Finalmente, puede hacerlo sin bloqueo, por ejemplo, al procesar múltiples archivos simultáneamente. En ese caso, el archivo debe cerrarse explícitamente (mejorado según el comentario de @antinome):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
Referencias: API de archivo y la API de IO .