Module 08 · Leçon 4
Fichiers textes
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
─────────────────────────────────
T.D.O
─────────────────────────────────
FT : variable Texte
─────────────────────────────────
VAR
FT : Text;
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ération | Fichier typé | Fichier texte |
|---|---|---|
| Assign | ✓ | ✓ |
| Rewrite / Reset / Close | ✓ | ✓ |
| Eof | ✓ | ✓ |
| Read / Write | éléments du type | caractè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
| Fonction | Sens |
|---|---|
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
É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.
É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;
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
SeekouFileSizesur un texte : interdit. - Ouvrir avec
Rewriteun fichier qu'on voulait juste lire : on l'écrase ! - Confondre
ReadetReadln:Readne consomme pas le saut de ligne.
10. Quiz
Quiz (5 questions)
Le type prédéfini pour les fichiers textes en Pascal est :
Pour ajouter en fin de fichier sans écraser, on utilise :
FileSize fonctionne-t-il sur un fichier texte ?
Que fait Readln(F, ligne) ?
Eoln(F) retourne :