Exercice 15-E : read

Micro-exercice

Objectif : utiliser READ pour lire un enregistrement depuis un fichier. Dans cet exercice, vous allez ouvrir un fichier séquentiel, lire plusieurs lignes avec une boucle, afficher chaque ligne, puis arrêter la lecture quand la fin du fichier est atteinte.

Ce que vous pratiquez

  • Lire des enregistrements avec READ.
  • Détecter la fin avec AT END.
  • Répéter la lecture avec PERFORM UNTIL.

Point important

READ ne marche que si le fichier est déjà ouvert (ex : OPEN INPUT). Ici, le fichier s’appelle data.txt. Placez-le à côté de votre exécutable, ou adaptez le chemin.

Exemple minimal COBOL Boucle de lecture
Télécharger le code
       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.
À retenir : en séquentiel, on lit “dans l’ordre”. Si vous voulez relire depuis le début, il faut fermer et ré-ouvrir (ou utiliser d’autres techniques selon le type de fichier).

Votre micro-exercice

Faites ces 3 modifications :

  1. N’affichez que les 5 premières lignes, même si le fichier en contient plus.
  2. Ajoutez un compteur de lignes vides (lignes composées uniquement d’espaces).
  3. À 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.

Conseil : commencez avec un fichier de 3 à 6 lignes, puis augmentez progressivement. Tant que la boucle affiche toutes les lignes et s’arrête correctement, vous avez gagné.

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