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 risque de l'être, 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 avoir accès à l'identifiant du 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 suit :
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 lorsque vous traitez 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 : API fichier et le API IO .
7 votes
Je ne pense pas que la réponse gagnante actuelle soit correcte.
0 votes
Cela répond-il à votre question ? Comment lire les lignes d'un fichier en Ruby