Je voudrais avoir un peu plus d'informations sur le problème d'E/S de fichier que vous êtes ayant. Si je comprends bien, vous pouvez faire ce qui suit sans problème:
- Créer un nouveau fichier
- Ajouter les fiches
- sortie
Ensuite, si vous démarrez le programme à nouveau et immédiatement
- Ajouter un enregistrement
le programme bombarde avec une "erreur bizarre".
Est-il possible pour vous de lire et d'afficher l'enregistrement que vous avez écrit dans la course initiale? Je me demande si l'écriture précédente a réussi, ce qui remet en question l'intégrité du fichier.
Je suggère d'explorer le OPTIONAL
mot-clé pour SELECT
et l'ajout d'une clause trop FILE STATUS
. L'état du fichier doit être vérifié après chaque opération d'E/S (OUVRIR, FERMER, ÉCRIRE, LIRE, etc.). La valeur contenue dans la variable associée à FILE STATUS
vous amènera un long chemin vers la résolution du problème. Le table décrit les valeurs FILE STATUS
.
Vous pouvez également passer en revue ce tutorial sur en traitant des fichiers indexés dans COBOL.
Je n'ai peut-être pas compris quel est votre problème d'E/S de fichier mais je vois quelque chose d'autre qui risque de causer des problèmes plus tard!
Vous avez utilisé la construction suivante:
PERFORM Some-Paragraph
...
Some-Paragraph.
...
IF Some-Condition
PERFORM Some-Paragraph
END-IF
.
Le dernier PERFORM Some-Paragraph
est dans le cadre de le paragraphe lui-même. Les compilateurs COBOL ne peuvent pas signaler cela comme une erreur mais le comportement n'est pas défini. COBOL PERFORM n'est pas conforme à la sémantique CALL/RETURN que vous connaissez peut-être de autres langues. Ce que vous avez codé ici est communément appelé en tant que 'bombe logique'. Une description détaillée de ce à quoi je fais référence peut être trouvée here.
Je peux lire et afficher l'enregistrement écrit dans l'exécution initiale, mais si je quitte l'application, les données sont écrites (je peux le voir avec un éditeur hexadécimal), mais il ne peut plus être lu. Mais je vais restructurer le programme et le réécrire à partir de zéro. Merci pour votre aide! Yvan – friedkiwi