IDENTIFICATION DIVISION.
PROGRAM-ID. EXO-READ-25.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FICHIER-IN ASSIGN TO "data.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FICHIER-IN.
01 ENREG-IN PIC X(120).
WORKING-STORAGE SECTION.
01 WS-FIN PIC X VALUE "N".
88 FIN-FICHIER VALUE "O".
88 PAS-FIN VALUE "N".
01 WS-NB-LIGNES PIC 999 VALUE 000.
PROCEDURE DIVISION.
OPEN INPUT FICHIER-IN
MOVE 0 TO WS-NB-LIGNES
SET PAS-FIN TO TRUE
PERFORM UNTIL FIN-FICHIER
READ FICHIER-IN
AT END
SET FIN-FICHIER TO TRUE
NOT AT END
ADD 1 TO WS-NB-LIGNES
DISPLAY "Ligne " WS-NB-LIGNES " : " ENREG-IN
END-READ
END-PERFORM
CLOSE FICHIER-IN
DISPLAY "Total lignes lues : " WS-NB-LIGNES
STOP RUN.
Lecture simple
La logique est toujours la même : on ouvre le fichier, on lit, on traite la ligne, et on recommence. Le bloc AT END est le “signal” qui dit : “il n’y a plus rien à lire”.
- PERFORM UNTIL FIN-FICHIER : on boucle tant que ce n’est pas la fin.
- READ ... NOT AT END : on traite la ligne lue.
- READ ... AT END : on déclenche la fin et on sort de la boucle.
Votre micro-exercice
Faites ces 3 modifications :
- N’affichez que les 5 premières lignes, même si le fichier en contient plus.
- Ajoutez un compteur de lignes vides (lignes composées uniquement d’espaces).
- À la fin, affichez : “Lignes totales”, “Lignes vides”, “Lignes non vides”.
Erreur fréquente à éviter
Oublier de gérer la fin. Si vous n’utilisez pas AT END, votre programme essaie de lire après la fin et peut se comporter de façon inattendue.
Autre piège : confondre “lecture d’une ligne” et “lecture d’un champ”. READ lit un enregistrement complet dans la zone FD (ici ENREG-IN), puis vous utilisez cette zone pour afficher ou analyser.
Exemple de fichier data.txt
Créez un fichier data.txt dans le même dossier que votre programme compilé, par exemple :
Alpha
Beta
Gamma
Delta