On a vu hier quelques méthodes de la classe File. Aujourd’hui, on va en ouvrir et même en éditer.

Lire un fichier

Il y a plusieurs manières de lire un fichier. Voici la plus basique.

myfile = File.open("monfichier.txt", "r")
myfile.each_line {|line| puts line }
myfile.close
→ Je sais moi des sorciers qui invoquent les jets
Dans la jungle de Nouvelle-Guinée
Ils scrutent le zénith convoitant les guinées
Que leur rapporterait le pillage du fret

On crée un objet “myfile” avec la méthode .new, et en paramètre on a l’emplacement du fichier, et le mode du fichier, ici r pour “read-only” (c’est la valeur par défaut).
Ensuite, on appelle la méthode each_line, qui permet de parcourir une à une les lignes de mon fichier texte (en l’occurence, j’en ai 4). Par défaut, à la fin de chaque ligne est rajouté “\n”, c’est à dire un, retour à la ligne. On peut éventuellement mettre autre chose.
A la fin, on ferme le fichier.

Il y a une meilleure manière :

File.open("monfichier.txt") do |myfile|
myfile.each_line {|line| puts line }
end

Ici, on créer un bloc do/end directement en ouvrant le fichier. Le gros avantage est de ne pas avoir à fermer le fichier.

Et encore mieux :

IO.foreach("monfichier.txt") {|line| puts line }

Ici, on utilise la classe IO (Input/Output). On aurait tout aussi bien utiliser la classe File (qui est une classe enfant de IO, et à vrai dire, la seule vraie classe enfant de IO). On appelle directement la méthode .foreach, suivi d’un paramètre et du bloc de code à exécuter. Ca tient sur une ligne et le fichier est fermé automatiquement aussi.

Editer un fichier

Ca ressemble à la lecture de fichier.

File.open("monfichier.txt", "w") do |myfile|
myfile.write("Cargo Culte")
end

La différence est que l’on rajoute le paramètre “w”, pour “write-only”, et que l’on appelle la méthode .write.
w efface le fichier en totalité et ajoute la valeur passée en paramètre. Donc attention.

Une autre méthode qui rappelle les Array :

File.open("monfichier.txt", "w") do |myfile|
myfile << "Cargo" << " " << "Culte"
end

Mode de fichier

Il y a plusieurs paramètres possibles pour la méthode open de la classe File :

  • r (par défaut) : lire depuis le début
  • w (write-only) : efface le contenu et écrit par-dessus
  • a (write-only) : écrit à la fin du contenu
  • r+ (read-write) : écrit par-dessus le fichier, en commençant par le début
  • w+ (read-write) : efface tout et écrit par-dessus
  • a+ (read-write) : écrit à la fin du contenu