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
- OPEN I-O FICHIER-NOTES.
Ouvre le fichier en mode lecture **et** écriture.
PermetREAD,REWRITEetDELETE.
Attention : le fichier doit exister (sinon erreur à l’OPEN). - READ FICHIER-NOTES … AT END … NOT AT END
Lit chaque enregistrement un par un (comme dans le cours de lecture). - REWRITE ENREGISTREMENT-NOTE
Remplace l’enregistrement **actuellement lu** par le contenu actuel de la zone01.
Important : on ne peut faireREWRITEque juste après unREADréussi (position courante). - DELETE FICHIER-NOTES
Supprime l’enregistrement **actuellement lu**.
Comme pourREWRITE, doit suivre immédiatement unREADréussi.
Le fichier devient plus court ; les enregistrements suivants sont décalés. - CLOSE FICHIER-NOTES.
Toujours fermer après les modifications pour valider les changements sur disque.
Points importants pour débutants :
•
• Avec
• 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 (
•
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.