Apprendre COBOL – Les bases

Mise à jour de fichiers séquentiels (OPEN I-O, REWRITE, DELETE)

Après la lecture et l’écriture, voyons comment modifier ou supprimer des enregistrements dans un fichier existant. Cela nécessite d’ouvrir le fichier en mode I-O (Input-Output), puis d’utiliser READ, REWRITE (pour modifier) et DELETE (pour supprimer).

Exemple de code : Mise à jour des notes + suppression des mauvaises notes

IDENTIFICATION DIVISION.
PROGRAM-ID. MISE-A-JOUR-FICHIER.

ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
    SELECT FICHIER-NOTES ASSIGN TO "notes.txt"
           ORGANIZATION IS LINE SEQUENTIAL.

DATA DIVISION.
FILE SECTION.
FD  FICHIER-NOTES.
01  ENREGISTREMENT-NOTE.
    05  NUMERO-ETUDIANT   PIC 9(5).
    05  NOM               PIC X(20).
    05  NOTE              PIC 9(2)V9.

WORKING-STORAGE SECTION.
01  FIN-FICHIER           PIC X       VALUE "N".
01  CHOIX                 PIC X.
01  NOUVELLE-NOTE         PIC 9(2)V9.

PROCEDURE DIVISION.
    OPEN I-O FICHIER-NOTES.

    PERFORM TRAITER-ENREGISTREMENT UNTIL FIN-FICHIER = "O".

    CLOSE FICHIER-NOTES.
    DISPLAY "Mise à jour terminée.".
    STOP RUN.

TRAITER-ENREGISTREMENT.
    READ FICHIER-NOTES
        AT END
            MOVE "O" TO FIN-FICHIER
        NOT AT END
            DISPLAY SPACE
            DISPLAY "Étudiant : " NUMERO-ETUDIANT " " NOM " - Note : " NOTE
            DISPLAY "Action ? (M = Modifier note, S = Supprimer, Entrée = Passer) : "
            ACCEPT CHOIX

            EVALUATE TRUE
                WHEN CHOIX = "M" OR CHOIX = "m"
                    DISPLAY "Nouvelle note : "
                    ACCEPT NOUVELLE-NOTE
                    MOVE NOUVELLE-NOTE TO NOTE
                    REWRITE ENREGISTREMENT-NOTE
                    DISPLAY "Note modifiée."

                WHEN CHOIX = "S" OR CHOIX = "s"
                    DELETE FICHIER-NOTES
                    DISPLAY "Enregistrement supprimé."

                WHEN OTHER
                    DISPLAY "Enregistrement conservé."
            END-EVALUATE
    END-READ
    .
        
Télécharger le code

Exemple de fichier notes.txt avant exécution

00001DUPONT     Jean           12.5
00002MARTIN     Sophie         08.0
00003BERNARD    Lucas          15.5
00004DURAND     Emma           09.0
        

Exemple de fichier après exécution (si on modifie 00001 et supprime 00002)

00001DUPONT     Jean           16.0
00003BERNARD    Lucas          15.5
00004DURAND     Emma           09.0
        

Explication détaillée – focus sur la mise à jour

Points importants pour débutants :
REWRITE et DELETE ne fonctionnent que sur le dernier enregistrement lu.
• Avec LINE SEQUENTIAL, la longueur des enregistrements doit rester identique (pas de modification de taille).
• Pour des fichiers très gros, cette méthode est lente (lecture séquentielle complète).
• Pour des mises à jour fréquentes → préférer les fichiers indexés (INDEXED) que nous verrons plus tard.
Attention : Une erreur courante est d’oublier que DELETE ou REWRITE n’affecte que l’enregistrement courant. Toujours tester sur une copie du fichier !

Prochain sujet : Gestion des erreurs fichiers avec FILE STATUS et INVALID KEY, puis introduction aux fichiers INDEXED.