2009-03-28 5 views
3

Salut, tout le monde. J'ai un peu de mal dans un projet de codage que j'essaie d'aborder dans l'environnement zOS en utilisant COBOL. J'ai besoin de lire un fichier et de les mettre dans une table indexée (je sais qu'il y aura moins de 90 enregistrements). La chose qui me lance est que nous sommes liés par les paramètres du projet à utiliser une variable appelée "Table-Size" (mise à zéro à la déclaration). Compte tenu de tout cela, je dois faire quelque chose comme "se produit 1 à 90 fois en fonction de la taille de la table", mais je ne comprends pas comment cela fonctionnera si la taille de la table doit (pour autant que je sache) car la taille de la table est incrémentée avec chaque entrée ajoutée à la table. Quelqu'un peut-il éclaircir cela pour moi?COBOL Confusion

Merci!

Répondre

9

Il semble que votre principale préoccupation est: comment le compilateur sait-il combien à allouer dans le tableau si la taille change au moment de l'exécution?

La réponse est qu'il alloue maximum quantité d'espace (assez pour 90 entrées). Notez que ceci est pour l'espace dans stockage de travail. Lorsque l'enregistrement est écrit dans un fichier , seule la partie pertinente est écrite.

Un exemple:

01 TABLE-SIZE PIC 9 
01 TABLE OCCURS 1 TO 9 TIMES DEPENDING ON TABLE-SIZE 
    03 FLD1 PIC X(4) 

Ceci affectera 36 caractères (9 multiplié par 4) pour TABLE en mémoire de travail. Si TABLE-SIZE est mis à 2 lorsque l'enregistrement est écrit dans un fichier , seulement 8 caractères de TABLE seront écrits (au-delà des caractères écrits pour TABLE-SIZE, bien sûr).

Ainsi, par exemple, si la mémoire occupée par TABLE était AaaaBbbbCcccDdddEeeeFfffGgggHhhhIiii, la date écrite dans le fichier peut être le raccourci (y compris la taille): 2AaaaBbbb.

De même, lors de la relecture de l'enregistrement, TABLE-SIZE et les bits pertinents de TABLE seront remplis à partir du fichier (en ne définissant que la taille et les deux premiers éléments).

Je ne crois pas que les entrées TABLE non utilisées sont initialisées à quoi que ce soit lorsque cela se produit. Il est préférable de ne pas le faire de toute façon et de les remplir explicitement si vous devez ajouter un autre élément à la table.

Pour des raisons d'efficacité, vous pouvez envisager de définir le TABLE-SIZE sur USAGE IS COMP.

+0

C'était précisément ce que j'essayais de comprendre. Merci pour votre temps et vos connaissances. – Enyalius

+0

Le traitement des données de longueur variable est déjà long. L'utilisation d'un champ AFFICHAGE USAGE pour la variable ODO ajoute à cela, sans but. Définissez cela comme "binaire". –

+0

@Bill, c'est un bon point mais lié tangentiellement à la question à mon avis. Je vais ajouter une note, car c'est vraiment un bon conseil. – paxdiablo

2

Nous n'avons pas assez d'informations ici, mais le principe de base est que la variable nommée dans la clause DEPENDING ON doit contenir le nombre variable de groupes. Donc, vous avez besoin de quelque chose comme

01 TABLE-SIZE  PIC 99 
01 TABLE OCCURS 1 TO 90 TIMES 
     DEPENDING ON TABLE-SIZE 
    03 FIELD-1 
    03 FIELD-2 

et ainsi de suite.

Voir this article ou this article chez Publib.

+0

Merci beaucoup pour le matériel de référence, Charlie.Je vais l'examiner, et je suis certain que cela va m'aider à l'avenir Merci! – Enyalius

+0

Identique à ci-dessus. Rendez la taille de la table "binaire". –