Vous pouvez lire le fichier en une seule fois:
content = File.readlines 'file.txt'
content.each_with_index{|line, i| puts "#{i+1}: #{line}"}
Lorsque le fichier est volumineux ou peut être volumineux, il est généralement préférable de le traiter ligne par ligne:
File.foreach( 'file.txt' ) do |line|
puts line
end
Parfois, vous souhaitez accéder au descripteur de fichier ou contrôler vous-même les lectures:
File.open( 'file.txt' ) do |f|
loop do
break if not line = f.gets
puts "#{f.lineno}: #{line}"
end
end
Dans le cas de fichiers binaires, vous pouvez spécifier un séparateur nul et une taille de bloc, comme ceci:
File.open('file.bin', 'rb') do |f|
loop do
break if not buf = f.gets(nil, 80)
puts buf.unpack('H*')
end
end
Enfin, vous pouvez le faire sans bloc, par exemple lors du traitement de plusieurs fichiers simultanément. Dans ce cas, le fichier doit être explicitement fermé (amélioré selon le commentaire de @antinome):
begin
f = File.open 'file.txt'
while line = f.gets
puts line
end
ensure
f.close
end
Références: File API et IO API .