Lecture d’un fichier texte – Premier programme avec fichier
Ce programme montre le squelette classique pour lire un fichier texte séquentiel en COBOL :
- Déclarer le fichier
- L’ouvrir
- Lire un enregistrement
- Afficher son contenu
- Fermer le fichier
Le code expliqué
IDENTIFICATION DIVISION.
PROGRAM-ID. PROGRAM-NAME.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT FILE-NAME
ASSIGN TO "pacta-filename.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD FILE-NAME.
01 RECORD-NAME.
05 FIELD-1 PIC X(10).
WORKING-STORAGE SECTION.
01 VARIABLE-NAME PIC X(20) VALUE SPACES.
01 EOF-FLAG PIC X VALUE "N".
88 EOF VALUE "Y".
PROCEDURE DIVISION.
PARAGRAPH-NAME.
OPEN INPUT FILE-NAME
READ FILE-NAME
AT END
SET EOF TO TRUE
NOT AT END
DISPLAY "Hello Pacta Cobol"
DISPLAY FIELD-1
END-READ
CLOSE FILE-NAME
STOP RUN.
Ce que fait vraiment ce programme
Hello Pacta Cobol
0123456789
Explication ligne par ligne
SELECT FILE-NAME ASSIGN TO "pacta-filename.txt" ORGANIZATION IS LINE SEQUENTIAL.
Associe un nom logique (FILE-NAME) à un fichier physique sur disque.LINE SEQUENTIAL= fichier texte ligne par ligne (le plus courant pour .txt).FD FILE-NAME.
Description du format du fichier (File Description). Obligatoire.01 RECORD-NAME.
05 FIELD-1 PIC X(10).
Chaque ligne lue sera placée dans cet enregistrement. Ici on ne lit que les 10 premiers caractères de chaque ligne.01 EOF-FLAG PIC X VALUE "N".
88 EOF VALUE "Y".
Drapeau de fin de fichier + condition 88 (style très COBOL). Permet d’écrire plus tard :PERFORM UNTIL EOF.OPEN INPUT FILE-NAME
Ouvre le fichier en lecture.READ FILE-NAME
AT END
SET EOF TO TRUE
NOT AT END
DISPLAY "Hello Pacta Cobol"
DISPLAY FIELD-1
END-READ
Lit **un seul** enregistrement.
Si fin de fichier → met le drapeau EOF à "Y".
Sinon → affiche un message + les 10 premiers caractères lus.CLOSE FILE-NAME
Ferme toujours le fichier (bonne pratique).
→ Il lit seulement la première ligne du fichier pacta-filename.txt et affiche ses 10 premiers caractères (ou moins si la ligne est plus courte).
Points importants / Améliorations à connaître :
- Ce code ne lit qu’une seule ligne. Pour lire tout le fichier, il faut une boucle :
PERFORM UNTIL EOF
READ FILE-NAME
AT END SET EOF TO TRUE
NOT AT END DISPLAY FIELD-1
END-READ
END-PERFORM- Il n’y a pas de gestion d’erreur d’ouverture (
OPENpeut échouer si le fichier n’existe pas). - En environnement batch, le nom du fichier est souvent passé par
ASSIGN TOdynamique ou JCL.
Version corrigée et complète (toutes les lignes)
PERFORM UNTIL EOF
READ FILE-NAME
AT END
SET EOF TO TRUE
NOT AT END
DISPLAY FIELD-1
END-READ
END-PERFORM
C’est la structure que vous verrez 95 % du temps pour lire un fichier texte séquentiel en COBOL.