Bonjour,
Nouveau sur ce site, j’ai noté quelques post de la rubrique COBOL qui pourraient être complétés. Ceux-ci étant notés résolus, je propose d’annexer 2 exemples les plus courts possible qui concernent Enterprise COBOL, pour les utilisateurs z/OS spécifiquement donc.
- A la question : comment récupérer le LRECL d’un fichier QSAM lu avec RECORD 0 ?
Cette information est en MVS dans un bloc de contrôle : le Data Control Block. Il faut savoir que la description du fichier via la FD COBOL pointe sur ce DCB qui est alloué à l’OPEN. Cette zone n’étant pas directement adressable, il faut ruser. On utilise ici la possibilité de sources imbriqués dans Enterprise COBOL pour adjonction d’un module qui se limite à restituer l’adresse de la donnée communiquée (pointeur = 4 octets).
NB. Exemple pour faire court, fonctionnellement il conviendrait d’isoler ce type de fonctionnalité testé ici en z/OS 1.5 (le DCB risque peu d’évoluer, au contraire de son extension DCBE, ajoutée depuis MVS ESA).
--> exemple PJ S1
- Des difficultés de manipulation de chaînes de données sur des post et que j’ai parfois remarqué ailleurs : les instructions UNSTRING, STRING et INSPECT sont plus puissantes qu’il n’y paraît.
Pour exemple, un petit programme qui découpe une donnée en mots pour les restituer associés avec leur longueur via un DISPLAY global (via un tableau indexé, accès plus performants que par des indices).
--> exemple PJ S2
- Enfin pour deux autres questions :
- comment vérifier les données non utilisées dans un programme : laisser faire le compilateur. L’option de compilation OPTimize(FULL) permet à Enterprise COBOL de ne pas tenir compte des Picture groupes non utilisées. Pour les repérer, ajouter provisoirement une CBL OPT(FULL),MAP en tête du source et faire un FIND de BLW=XXXXX dans la SYSOUT de compilation. Les zones WSS sont adressées en COBOL II par des BLW = ‘Base Locator Working’ (de 0 à N) ou pour les variables externes, des BLL (Linkage), BLF (File), de 1 à N. Celles-ci sont listées par l’option MAP, ce qui est très pratique pour vérifier les longueurs des données en mémoire réservées par COBOL, particulièrement pour les zones groupes sous définies (0CLnn, ce sont des descriptions Assembleur).
- comment récupérer le Datasetname d’un fichier MVS. Parce que l’on chaîne les blocs de contrôle MVS et parce qu’en COBOL ce n’est pas si simple. C’est normalement l’Assembleur que l’on utilise pour ça, on est trop ‘système dépendant’.
Bien entendu je tenterai de répondre de façon plus approfondie pour des demandes d’éclaircissement sur l’un de ces points évoqués.
Partager