2010-07-21 4 views
0

Tout d'abord, voici le code source complet: http://pastebin.com/5teGNrPCétrange erreur COBOL

Je reçois une erreur COBOL bizarre, et je ne pouvais pas trouver ce que cela signifie. Il dit Erreur d'ouverture (voir la capture d'écran suivante: Screenshot http://img251.imageshack.us/img251/623/screenshotyj.png ) (pleine grandeur à http://img251.imageshack.us/img251/623/screenshotyj.png)

Il ne se produit pas si je suis utilise « nouveau fichier » et ajouter un enregistrement après.

est ici le binaire d'application, et certains fichiers journaux, il produit: http://www.mediafire.com/?5enhwqcvid9djnr

Un grand merci,

Yvan

PS: Il est le dialecte Fujitsu NetCOBOL.

Répondre

1

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.

+0

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

1

Peut-être que le programme essaie d'accéder au fichier avant qu'il ne soit créé. L'option 'new file' crée probablement le fichier de données avec l'instruction OPEN OUTPUT et l'ajout d'un enregistrement réussira.

+0

Cela fonctionne en effet si d'abord un nouveau fichier est créé, et ensuite un enregistrement est ajouté au nouveau fichier. Mais si je quitte l'application, et essaie de rouvrir le fichier et ajouter un nouvel enregistrement, il se bloque avec le message ci-dessus. – friedkiwi

1

La première erreur est probablement une erreur d'état du fichier 35, ouvrant un fichier qui n'existe pas. Vous devez restructurer votre code. Dans un programme de saisie de données, vous n'avez besoin que des instructions OPEN et CLOSE à exécuter une fois à chaque fois. Dans ce programme, l'instruction OPEN doit être placée aussi près que possible du début du code source (à exécuter une fois au début, ainsi que pour la lisibilité) et le CLOSE doit être juste avant le STOP RUN.