Apprenez les bases du COBOL et développez vos compétences en programmation legacy avec une approche moderne.
Objectif : lire un fichier séquentiel ligne par ligne, détecter la fin de fichier, compter les enregistrements et produire un résultat sans interface graphique, comme dans un vrai traitement batch.
Pour lire un fichier, Cobol suit un scénario très régulier. C’est une “recette” que vous réutilisez partout.
FILE-CONTROL (nom logique + fichier réel),
puis dans FILE SECTION (structure de la ligne).
OPEN
INPUT (lecture).
READ + fin de fichier
AT END .
La fin de fichier est un événement normal, qu’on gère explicitement.
CLOSE
OPEN / CLOSE évite beaucoup de problèmes.
F-IN ) n’est pas le nom du fichier sur disque.
2) L’organisation LINE SEQUENTIAL convient aux fichiers texte “une ligne = un enregistrement”.
Exemple : le programme lit noms.txt, affiche chaque ligne et compte le nombre total de lignes lues.
>>SOURCE FORMAT FREE
IDENTIFICATION DIVISION.
PROGRAM-ID. DEMO-FILE.
ENVIRONMENT DIVISION.
INPUT-OUTPUT SECTION.
FILE-CONTROL.
SELECT F-IN ASSIGN TO "noms.txt"
ORGANIZATION IS LINE SEQUENTIAL.
DATA DIVISION.
FILE SECTION.
FD F-IN.
01 F-IN-REC PIC X(80).
WORKING-STORAGE SECTION.
01 WS-EOF PIC X VALUE "N".
01 WS-COUNT PIC 9(5) VALUE 0.
PROCEDURE DIVISION.
OPEN INPUT F-IN
PERFORM UNTIL WS-EOF = "Y"
READ F-IN
AT END
MOVE "Y" TO WS-EOF
NOT AT END
ADD 1 TO WS-COUNT
DISPLAY "Lu : " F-IN-REC
END-READ
END-PERFORM
CLOSE F-IN
DISPLAY "Total lignes : " WS-COUNT
STOP RUN.
noms.txtDURANDMARTINBERNARD
cobc -x -free demo-file.cbl
noms.txt dans le même dossier d’exécution (ou adaptez le chemin).
Les erreurs de fichiers sont très souvent des erreurs de chemin, de mode d’organisation, ou de discipline d’ouverture/fermeture.
noms.txt.
LINE SEQUENTIAL n’est pas équivalent à un fichier “fixe”.
OPEN ou CLOSE : comportement imprévisible selon l’environnement.
Si le fichier n’est pas trouvé, affichez d’abord un message “début programme”, puis un message après
OPEN . Si rien ne s’affiche après, vous savez où ça bloque.
La simplicité de ce modèle est sa force : des millions de lignes peuvent être traitées de façon stable. Les traitements batch sont fréquents en consolidation, facturation, rapprochement et édition.
NOT AT END
IF FUNCTION TRIM(F-IN-REC) = ""
CONTINUE
ELSE
ADD 1 TO WS-COUNT
DISPLAY "Lu : " F-IN-REC
END-IF
INSPECT et on teste si au moins une occurrence est trouvée.
WORKING-STORAGE SECTION.
01 WS-LETTER PIC X VALUE "A".
01 WS-TALLY PIC 9(5) VALUE 0.
01 WS-LINE-HIT PIC 9(5) VALUE 0.
...
NOT AT END
MOVE 0 TO WS-TALLY
INSPECT F-IN-REC TALLYING WS-TALLY FOR ALL WS-LETTER
IF WS-TALLY > 0
ADD 1 TO WS-LINE-HIT
END-IF