Savez-vous si il existe des utilitaires de traitement de COPY COBOL sous windows ou unix.
Je souhaiterai contrôler la taille de mes COPY et déterminer les positions/longueurs de chaque champs.
hé, je ne m'attendais pas du tout à ce genre de réponse mais plutot à un truc du genre : "et la marmotte ..."
Bon, voici l'énoncé de l'exercice :
Dans un environnement UNIX ou Windows, je souhaite disposer d'un utilitaire qui me sortirait d'une COPY COBOL les informations suivantes :
- longueur totale de la copy
- pour chacun des champs : sa position et sa longueur
On part du principe que la copy est correcte, je ne demande pas on plus de réécrire un compilateur
Y'a bien longtemps j'avais fait un outils avec excel (he oui ) mais il se vautrait avec les occurs. Et il fallait que les pictures soient positionnées au bon endroit ... un peu galère, donc abandonné ...
Sous Unix le syncsort (utilitaire) peut te permettre de déterminer la longueur de ton enregistrement, ainsi que de tes champs avec position / longueur.
Mais c'est à toi de le remplir via le script Unix.
En COBOL, il te faudra donner un minimum d'information au programme
pour que celui ci puisse fonctionner .
Dans tout les cas, il te faudra donner des infos soit au script ou au programme COBOL
Ma conclusion, est que je ne sais pas si cela est possible d'après une description COBOL d'en déterminer le contenu détaillé.
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!
J'ai peut être 2 solutions à te soumettre.
En espérant qu'elles puissent répondre à ton problème.
SOLUTION 1
==========
Transférer ton fichier COBOL au format CSV sous WINDOWS
Le récupérer sous EXCEL. Il sera normalement bien formaté avec les colonnes.
Faire une ou des macros pour cumuler le nb de caractères de chaque cellule
sur une ligne seulement. Cela suffira pour te donner la longueur de ta copie
COBOL.
L'inconnue, c'est s'il y a des zones groupes, ou packées ou en occurs. Je ne
sais pas comment réagit EXCEL. A tester peut être ???
SOLUTION 2
==========
Je suis parti du principe que comme tu as la copie COBOL, tu connais sa
longueur, donc son contenu.
Il te reste plus q'a mettre dans un fichier en TXT (par exemple)
le descriptif précis de ton enregistrement.
En entrée de ton batch, il te faudra lire ce fichier afin de récupérer le détail des infos qui t'intéresse.
Le programme va calculer la longueur totale de ton enregistrement, avec le détail des champs.
C'est sûr que sur une petite description de fichier (comme dans mon exemple) ou il y a peu de champ, l'intérêt est faible.
Mais sur une structure de fichier avec des dizaines de champs, cela devient très intéressant.
De plus rien ne t'empêche de prévoir un traitement multi enregistrements, et multi fichiers.
J'ai définit plusieurs formats de zones afin de traiter la majorité des cas.
Définition de structures
========================
Nom copie COBOL : TOTO
Si la longueur de ton enregistrement en entrée est de 100 caractères
définit comme suit.
01 FIC-ENR.
05 FIC-ZON1 pix X(10).
05 FIC-ZON2 pic X(20).
05 FIC-ZON3 pic 9(10).
05 FIC-ZON4 pic S9(15).
05 FIC-ZON5 pic S9(08)V99.
05 FIC-ZON6 pic S9(06)V99 COMP-3.
05 FIC-ZON7 pic 9(03) occurs 3.
05 FIC-ZON8 pic X(22).
Total 7 champs
Il te faudra pré remplir ton fichier texte avec les infos suivantes correspondant à ta description COBOL :
01 TXT-DEF.
05 TXT-DEF-ALP-NUM01 PIC X value 'X'.
05 TXT-DEF-LONG01 PIC 9(02) value 10.
05 TXT-DEF-ALP-NUM02 PIC X value 'X'.
05 TXT-DEF-LONG02 PIC 9(02) value 20.
05 TXT-DEF-ALP-NUM03 PIC X value 'N'.
05 TXT-DEF-LONG03 PIC 9(02) value 10.
05 TXT-DEF-ALP-NUM04 PIC X value 'N'.
05 TXT-DEF-LONG04 PIC 9(02) value 15.
05 TXT-DEF-ALP-NUM05 PIC X value 'N'.
05 TXT-DEF-LONG05 PIC 9(02) value 10.
05 TXT-DEF-DECIM05 PIC X value 'D'.
05 TXT-DEF-LONG-DECIM05 PIC 9(02) value 02.
05 TXT-DEF-ALP-NUM06 PIC X value 'N'.
05 TXT-DEF-LONG06 PIC 9(02) value 04.
05 TXT-DEF-DECIM06 PIC X value 'D'.
05 TXT-DEF-LONG-DECIM06 PIC 9(02) value 02.
05 TXT-DEF-PACKEE06 PIC X value 'P'.
05 TXT-DEF-ALP-NUM07 PIC X value 'N'.
05 TXT-DEF-LONG07 PIC 9(02) value 03.
05 TXT-DEF-OCC07 PIC X value 'O'.
05 TXT-DEF-NB-OCC07 PIC 99 value 03.
05 TXT-DEF-ALP-NUM08 PIC X value 'X'.
05 TXT-DEF-LONG08 PIC 9(02) value 22.
Cela fait 2 fichiers en entrées
Eventuellement un fichier en sortie qui récapitule ton résultat ou l'afficher simplement à l'écran (au choix)
Traitement
==========
Il te faudra analyser l'enregistrement lu caractère par caractère sur le 1er enregistrement, cela suffira.
Pour chaque champ, il te faudra définir les actions suivantes :
Cumuler le nombre de champ Alphabétique
Cumuler le nombre de champ numérique
Sur les champs numériques :
Si ce champ est avec décimale(s) cumuler le nombre de champ numériques ave décimales
Si ce champ est packé cumuler le nombre de champ numériques packé
Cumuler la longueur de chaque champ pour obtenir la longueur de l'enregistrement ou copie COBOL.
Afficher sous forme de tableau à l'écran le résultat :
!---------------------------------------------------------------------!
! Nom de la copie COBOL : TOTO !
!---------------------------------------------------------------------!
! Le nombre de champ Alpahnumérique : 3 !
! Le nombre de champ Numérique : 7 !
! Le nombre de champ Numérique avec décimale : 2 !
! Le nombre de champ Numérique avec occurs : 3 !
! Le nombre de champ Numérique packé : 1 !
!----------------------------------------------------------------------!
! La longueur de la copie COBOL est de : 100 C !
!----------------------------------------------------------------------!
Ou remplir un fichier texte en sortie ayant 1 seul enregistrement en sortie récapitulatif du tableau
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!
Ouai, Excel ca peut aller si c'est pas compliqué.
Mais avec nos occurs, on est dedans.
Je suis entrain de développer un outils pour automatiser tout ca. Il me reste à faire la partie analyseur syntaxique mais sur ce point je suis un grosse bille, ca va surement me prendre longtemps.
Quand ca sera terminé et certifé je le mettrai gratuitement à disposition.
Qu'est-ce qu'on peut perdre comme temps avec ces copy ...
Effectivement avec le COBOL, l'interprétation des clauses COPY est BASIC.
Dans ton cas, Il faut lui fournir un certain nombre d'information car le programme superpose la description de fichier avec l'enregistrement lu.
Il ne sait pas interpréter la clause copy autrement (nb de zones, longueur de
l'enr, etc...).
Ton résultat intéressa sans aucun doute la communautée COBOLISTIQUE
HULK77
__________________________
Ma fabrique de chemises tourne à plein régime !!!
le controle d'un copy peut etre effectuée sous TSO : utiliataire FILE-AID.
- 1) il te formate le fichier en associant ton copy donc chaque valeur du fich est positionnée sous la colonne su copy
- 2) l'option 8 d FILE-AID te genere la composition du copy ains que sa longueur totale.