Passer au contenu principal
eLearner.app
Module 5 · Leçon 2 sur 210/10 dans le cours~15 min
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é :

Code
       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 :

Code
       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 le SELECT et le FD), 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 comme WS-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). Écrire WRITE SALES-FILE est une erreur de syntaxe courante qui empêche la compilation.

Code
       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 :

Code
       CLOSE SALES-FILE.

Notez que l’instruction CLOSE prend comme argument le nom logique du fichier (et non l’enregistrement).


À vous de jouer

Exercice#cobol.m5.l2.e1
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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

Exercice#cobol.m5.l2.e2
Tentatives : 0Chargement…

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.

Chargement de l'éditeur…
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