Aller au contenu principal

Module 08 · Leçon 4

Fichiers textes

180 minanalyse · pascal
Affichage du code

Ce que vous saurez faire

  • Distinguer fichiers typés et fichiers textes
  • Lire et écrire des lignes dans un fichier texte
  • Ajouter en fin de fichier avec Ajouter (Append)

Avant de commencer

Un fichier de notes (real) est en binaire et donc illisible avec un éditeur. Comment stocker des données dans un fichier lisible (visible avec Notepad, Vim…) ?


1. Qu'est-ce qu'un fichier texte ?

Ali 14.5
Sara 16.0
Karim 11.2

2. Déclaration

T.D.O
─────────────────────────────────
FT : variable Texte
─────────────────────────────────

Pas de T.D.N.T à faire : Text est un type prédéfini en Pascal.


3. Différences avec les fichiers typés

OpérationFichier typéFichier texte
Assign
Rewrite / Reset / Close
Eof
Read / Writeéléments du typecaractères ou valeurs formatées
Readln / Writeln✓ (lignes)
Eoln (fin de ligne)
Seek / FilePos / FileSize / Truncate✗ INTERDITS
Append (ajouter en fin)

4. Lire un fichier texte

PROGRAM LireTexte;
VAR
  FT : Text;
  ligne : string;
BEGIN
  Assign(FT, 'notes.txt');
  Reset(FT);
  WHILE NOT Eof(FT) DO
  BEGIN
    Readln(FT, ligne);
    Writeln(ligne);
  END;
  Close(FT);
END.

Readln(FT, ligne) lit jusqu'au saut de ligne et le consomme.


5. Écrire dans un fichier texte

Assign(FT, 'sortie.txt');
Rewrite(FT);
Writeln(FT, 'Première ligne');
Writeln(FT, 'Deuxième ligne');
Writeln(FT, 'x = ', 42, ' y = ', 3.14:5:2);
Close(FT);

Writeln écrit puis ajoute un saut de ligne. Write écrit sans saut.


6. Ajouter en fin de fichier : Append

Rewrite écraserait tout. Pour ajouter sans perdre l'existant :

Assign(FT, 'log.txt');
Append(FT);            { ouvre en ajout — fichier doit exister }
Writeln(FT, 'Nouvelle entrée');
Close(FT);

7. Fonctions Eoln et Eof

FonctionSens
Eof(FT)Vrai si pointeur à la fin du fichier
Eoln(FT)Vrai si pointeur en fin de ligne
SeekEof(FT)comme Eof mais ignore les espaces/tab de fin
SeekEoln(FT)comme Eoln mais ignore les espaces/tab

8. Exercices

Exercice 1facile
Copier un fichier

Écrire un programme qui copie le contenu de source.txt dans copie.txt, ligne par ligne.

Voir le corrigé
PROGRAM Copier;
VAR F1, F2 : Text; ligne : string;
BEGIN
  Assign(F1, 'source.txt'); Reset(F1);
  Assign(F2, 'copie.txt');  Rewrite(F2);
  WHILE NOT Eof(F1) DO
  BEGIN
    Readln(F1, ligne);
    Writeln(F2, ligne);
  END;
  Close(F1); Close(F2);
END.
Exercice 2moyen
Compter les lignes (type bac courant)

Écrire une fonction NbLignes(nom_fichier : chaîne) : entier qui retourne le nombre de lignes du fichier.

Voir le corrigé
FUNCTION NbLignes(nom : string) : integer;
VAR F : Text; ligne : string; n : integer;
BEGIN
  Assign(F, nom);
  Reset(F);
  n := 0;
  WHILE NOT Eof(F) DO
  BEGIN
    Readln(F, ligne);
    n := n + 1;
  END;
  Close(F);
  NbLignes := n;
END;
Exercice 3difficile
Filtrer les lignes (hors bac, bonus)

Lire un fichier texte. Pour chaque ligne, l'écrire dans pairs.txt si son numéro est pair, dans impairs.txt sinon.

Voir le corrigé
PROGRAM Filtrer;
VAR F, Fp, Fi : Text;
  ligne : string;
  n : integer;
BEGIN
  Assign(F, 'source.txt');   Reset(F);
  Assign(Fp, 'pairs.txt');   Rewrite(Fp);
  Assign(Fi, 'impairs.txt'); Rewrite(Fi);
  n := 0;
  WHILE NOT Eof(F) DO
  BEGIN
    n := n + 1;
    Readln(F, ligne);
    IF n MOD 2 = 0 THEN
      Writeln(Fp, ligne)
    ELSE
      Writeln(Fi, ligne);
  END;
  Close(F); Close(Fp); Close(Fi);
END.

9. Erreurs fréquentes au bac

  • Utiliser Seek ou FileSize sur un texte : interdit.
  • Ouvrir avec Rewrite un fichier qu'on voulait juste lire : on l'écrase !
  • Confondre Read et Readln : Read ne consomme pas le saut de ligne.

10. Quiz

Quiz (5 questions)

1

Le type prédéfini pour les fichiers textes en Pascal est :

2

Pour ajouter en fin de fichier sans écraser, on utilise :

3

FileSize fonctionne-t-il sur un fichier texte ?

4

Que fait Readln(F, ligne) ?

5

Eoln(F) retourne :

Bravo d'être arrivé jusqu'ici. Marquez la leçon terminée pour ancrer le progrès.