Leçons du module (2/2)
Opérations d’E/S de Fichiers
Une fois un fichier associé et déclaré dans la DATA DIVISION, nous pouvons le manipuler au sein de la PROCEDURE DIVISION. En COBOL, la gestion du cycle de vie des fichiers suit un flux standard et impératif : ouverture, opération (lecture ou écriture) et fermeture.
1. Ouverture des fichiers : instruction OPEN
Avant de pouvoir lire ou écrire dans un fichier, celui-ci doit être ouvert en indiquant le mode d’accès approprié :
OPEN INPUT SALES-FILE.
Les principaux modes sont :
INPUT: Le fichier est ouvert en lecture seule. Le fichier doit exister sur le disque, sinon le programme provoquera une erreur.OUTPUT: Le fichier est ouvert en écriture. Si le fichier existe déjà, son contenu précédent est effacé (sobrescriture). S’il n’existe pas, il est créé.EXTEND: Le fichier est ouvert pour l’ajout de données (append). Les nouveaux enregistrements seront écrits à partir de la fin du fichier existant.I-O: Le fichier est ouvert à la fois en lecture et en écriture (utilisé principalement pour les fichiers à accès relatif ou indexé, non séquentiels linéaires).
2. Lecture des données : instruction READ
Pour lire un enregistrement à partir d’un fichier séquentiel, nous utilisons l’instruction READ. Étant donné que nous ne savons pas à l’avance combien d’enregistrements contient le fichier, il faut toujours gérer la condition de fin de fichier (EOF - End Of File) à l’aide de la clause AT END :
READ SALES-FILE
AT END MOVE "Y" TO WS-EOF
END-READ.
READ SALES-FILE: Notez que l’instruction fait référence au nom logique du fichier (défini dans leSELECTet leFD), et non à l’enregistrement.AT END: Spécifie les instructions à exécuter lorsque l’on tente de lire au-delà du dernier enregistrement disponible. Généralement, on définit une variable drapeau (flag commeWS-EOF) à"Y".END-READ: Termine de manière explicite l’instruction de lecture.
3. Écriture des données : instruction WRITE
Pour insérer des données dans un fichier, nous utilisons l’instruction WRITE.
[!WARNING] En COBOL, on lit un fichier (
READ SALES-FILE), mais on écrit un enregistrement (WRITE SALES-RECORD). ÉcrireWRITE SALES-FILEest une erreur de syntaxe courante qui empêche la compilation.
MOVE 1001 TO EMP-ID.
MOVE "MARIO ROSSI" TO EMP-NAME.
WRITE SALES-RECORD.
Avant d’exécuter la WRITE, les champs subordonnés de la structure de groupe de l’enregistrement FD (dans ce cas SALES-RECORD) doivent avoir été correctement valorisés en mémoire.
4. Fermeture des fichiers : instruction CLOSE
À la fin des traitements, tout fichier ouvert doit obligatoirement être fermé afin de libérer les ressources système et de s’assurer que toutes les données sont effectivement écrites sur le disque :
CLOSE SALES-FILE.
Notez que l’instruction CLOSE prend comme argument le nom logique du fichier (et non l’enregistrement).
À vous de jouer
Complétez la PROCEDURE DIVISION en ouvrant le fichier SALES-FILE en mode INPUT, en lisant le premier enregistrement et en définissant la variable de contrôle WS-EOF sur 'Y' lorsque la fin du fichier est atteinte. Enfin, n’oubliez pas de fermer le fichier avant de terminer.
Afficher l'indice
Écrivez dans l’ordre : OPEN INPUT SALES-FILE. puis READ SALES-FILE AT END MOVE 'Y' TO WS-EOF END-READ. puis CLOSE SALES-FILE. et enfin STOP RUN.
Solution disponible après 3 tentatives
Complétez la PROCEDURE DIVISION en ouvrant le fichier SALES-FILE en mode OUTPUT. Déplacez la valeur 1001 dans le champ SALES-ID et 250.50 dans le champ SALES-AMOUNT, puis écrivez l’enregistrement SALES-RECORD dans le fichier. Enfin, fermez le fichier avant d’arrêter le programme.
Afficher l'indice
Ouvrez le fichier avec OPEN OUTPUT SALES-FILE., utilisez MOVE pour valoriser SALES-ID et SALES-AMOUNT, exécutez WRITE SALES-RECORD. (en écrivant l’enregistrement, pas le fichier !), fermez avec CLOSE SALES-FILE. et terminez par STOP RUN.
Solution disponible après 3 tentatives