Fichiers texte

01 - Introduction 03 - Écriture
02 - Lecture 04 - Exercices

01

Introduction

Un fichier texte est généralement un fichier, portant l'extension « .txt », qui contient que du texte dans le format ASCII, sans formatage. Les fichiers texte ont une très grande utilité dans la programmation, car ils permettent de modifier les données d'une application sans la nécessité de compiler le code source une nouvelle fois. Un tel exemple est l'application Dictionnaire, où on peut modifier le vocabulaire en réécrivant le contenu du fichier texte; aucune modification du code source n'est nécessaire.

En Delphi, l'accès aux fichiers texte se fait à l'aide du type de variable TextFile. Cette variable est la liaison entre notre application et le fichier texte et toute lecture et écriture se fait à travers cette variable.

Exemple de définition d'une variable de type TextFile
var
  monFichierTexte : TextFile;

Avant de pouvoir utiliser cette variable, il faut associer la variable à un fichier sur l'ordinateur. Ceci crée le lien entre la variable et un fichier spécifique et se fait à l'aide de la procédure AssignFile.

Exemple d'utilisation de assignFile
var
  monFichierTexte : TextFile;

begin
  assignFile(monFichierTexte, 'exemple.txt');
end.

Après avoir créé le lien entre la variable et le fichier texte, on doit ouvrir le fichier texte. Ceci peut se faire de trois manières :

Finalement, il faut fermer le fichier texte à l'aide de la procédure closeFile.

Exemple d'utilisation de closeFile
var
  monFichierTexte : TextFile;

begin
  assignFile(monFichierTexte, 'exemple.txt');
  reset(monFichierTexte);
  { ... }
  closeFile(monFichierTexte);
end.

02

Lecture

La lecture d'un fichier texte se fait dans le mode lecture en utilisant la procédure Reset(). Elle diffère peu de la lecture d'une valeur du clavier et utilise les mêmes procédures read() et readln(). La seule différence est qu'il faut préciser comme premier argument une variable de type TextFile, dans laquelle on aimerait faire la lecture.

Attention: Le fichier texte doit se trouver dans le même répertoire que le fichier exécutable, sinon le programme ne peut pas trouver le fichier et terminera avec un message d'erreur.

Exemple de la lecture d'une ligne de texte avec affichage à la console
var
  monFichierTexte : TextFile;
  ligne : string;

begin
  assignFile(monFichierTexte, 'exemple.txt');
  reset(monFichierTexte);
  readln(monFichierTexte, ligne);
  writeln(ligne);
  closeFile(monFichierTexte);
end.

Lors de la lecture d'une valeur avec la procédure Read() ou Readln(), Delphi analyse automatiquement cette valeur et essaie de la convertir dans le bon format selon le type de variable. Si cette conversion n'est pas possible, le programme s'arrête avec un message d'erreur. De plus, en utilisant Readln() et après analyse du contenu, le texte restant de la ligne sera ignoré et le fichier se positionnera au début de la prochaine ligne.

Exemple avancé de readln()
{
 Le fichier texte 'exemple.txt' contient les lignes suivantes:
 1 2 3
 4 5 6
}

var
  monFichierTexte : TextFile;
  n1, n4, n5, n6;

begin
  assignFile(monFichierTexte, 'exemple.txt');
  reset(monFichierTexte);
  readln(monFichierTexte, n1); // les nombres 2 et 3 seront ignorés
  readln(monFichierTexte, n4, n5, n6);
  closeFile(monFichierTexte);
end;

Il faut savoir que la lecture d'une valeur utilise une approche gloutonne: Delphi va toujours essayer de lire le maximum de texte qui est compatible avec le type de variable. La lecture d'une valeur dans un type String va donc toujours lire la ligne entière. Ceci peut prêter à confusion dans la situation suivante:

Exemple de l'approche gloutonne de la lecture
{
 Le fichier texte 'test.txt' contient la ligne suivante:
 test 123
}

var
  f : textFile;
  s : string;
  i : integer;

begin
  AssignFile(f, 'test.txt');
  reset(f);
  readln(f, s, i);
  writeln(s); // va afficher 'test 123'
  writeln(i); // va afficher 0
  readln;
  close(f);
end.

Parfois, on ignore le nombre de lignes dans un fichier texte. Dans une telle situation, on peut tester si on a atteint la fin d'un fichier texte à l'aide de la fonction eof(f : TextFile) : boolean.

Exemple d'un programme qui calcule la somme du premier nombre de chaque ligne
var
  f : textFile;
  somme : integer;
  i : integer;

begin
  AssignFile(f, 'test.txt');
  reset(f);
  somme := 0;
  while NOT(eof(f)) do
    begin
      readln(f, i);
      somme := somme + i;
    end;
  writeln(somme);
  close(f);
  readln;
end.

03

Écriture

L'écriture d'un fichier texte peut se faire en utilisant le mode Reset() ou le mode ReWrite(). Comme l'édition d'un fichier, c.-à-d. la modification du contenu existant, est difficile à réaliser, je vous conseille de lire le contenu entier du fichier d'abord dans des structures de données adéquates et après modification des valeurs, de réécrire le fichier entier.

L'écriture d'un fichier texte se fait à l'aide des procédures write() et writeln(), tout en spécifiant comme premier argument une variable de type TextFile.

Exemple d'un programme qui écrit 3 valeurs littérales dans un fichier texte
program ecritureFichier;

{
 Ce programme écrit 3 valeurs littérales dans un fichier texte, notamment
 deux entiers séparés d'un espace dans une ligne et le mot « bananarama »
 dans une nouvelle ligne
}

var
  fichier : textFile;

begin
  AssignFile(fichier, 'output.txt');
  rewrite(fichier);
  writeln(fichier, 13, ' ', 27);
  writeln(fichier, 'bananarama');
  close(fichier);
end.

04

Exercices

  1. Que fait la procédure AssignFile() ?
  2. Un programme se termine toujours avec un message d'erreur lors de l'exécution de la procédure Reset(). Explique!
  3. Pourquoi a-t-on besoin de la fonction eof() ?
  4. Écris un programme qui affiche le contenu entier d'un fichier texte.
  5. Écris un programme qui calcule la moyenne des nombres d'un fichier texte. Le fichier contient un nombre indéterminé de nombres par ligne et un nombre indéterminé de lignes. Utilise la fonction eoln() pour résoudre cet exercice.
Sign In