IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Cobol Discussion :

Lire et afficher une structure cobol


Sujet :

Cobol

  1. #1
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut Lire et afficher une structure cobol
    Bonjour,

    J'ai un programme cobol qui utilise une structure externe :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    MY-STRUCTURE.
    ......STRUCTURE-NOM..........PIC X(20).
    ......STRUCTURE-PRENOM.....PIC X(20).
    ......STRUCTURE-AGE...........PIC 9(3).
    Si je fais un ''DISPLAY STRUCTURE-NOM'' dans le programme (après import de MY-STRUCTURE) ça me retournera la valeur du champs en PIC X(20).
    Jusqu'à là c'est normal.

    Je voudrais avoir un programme qui écrit dans une fichier TXT de sortie :
    STRUCTURE-NOM : JEAN
    STRUCTURE-PRENOM : DUPONT
    STRUCTURE-AGE : 50

    Est-il possible de savoir de manière dynamique que MY-STRUCTURE contient les champs STRUCTURE-NOM, STRUCTURE-PRENOM et STRUCTURE-AGE ?
    En gros je cherche à récupérer le nom des variables et non les variables.

    Comment faire ?
    Merci d'avance pour votre aide.

  2. #2
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    Je ne pense pas que tu puisses le faire dynamiquement comme tu le souhaites. Même en provenance d'une BDD, cela sera un peu délicat et ressemblera à une usine à gaz.

    Par contre, comme tu connais très bien ta structure et les éléments qui la composent, tu peux très bien ajouter les noms des variables à tes sorties.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
           01  MY-STRUCTURE.
               03 NOM      PIC X(20).
               03 PRENOM   PIC X(20).
               03 AGE      PIC 999.
          * pour préparer 3 lignes à sortir
           01  MY-SORTIE-NOM.
               03 FILLER   PIC X(9) VALUE 'NOM... : '.
               03 NOM      PIC X(20).
           01  MY-SORTIE-PRENOM.
               03 FILLER   PIC X(9) VALUE 'PRENOM : '.
               03 PRENOM   PIC X(20).
           01  MY-SORTIE-AGE.
               03 FILLER   PIC X(9) VALUE 'AGE... : '.
               03 AGE      PIC 999.
          * ou pour préparer 1 ligne à sortir
           01  MY-SORTIE.
               03 FILLER   PIC X(9) VALUE 'NOM... : '.
               03 NOM      PIC X(20).
               03 FILLER   PIC XXX VALUE ' - '.
               03 FILLER   PIC X(9) VALUE 'PRENOM : '.
               03 PRENOM   PIC X(20).
               03 FILLER   PIC XXX VALUE ' - '.
               03 FILLER   PIC X(9) VALUE 'AGE... : '.
               03 AGE      PIC 999.

  3. #3
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Justement c'est ce que je souhaite éviter.
    En vrai fait plus de 100 structures (actuellement) et il y en a qui sont vraiment costaud. C'est trop lourd à mettre en place malheureusement.

  4. #4
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Il n'est pas possible de passer par des manipulations d'adresse pour obtenir les infos que je cherche ?
    J'ai trouvé des choses intéressantes je pense mais j'avoue que c'est pas encore tout a fait à ma porté pour le moment.
    http://publib.boulder.ibm.com/iserie...c092540317.htm

  5. #5
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Si la structure en question correspond exactement à une table DB2, il est possible de récupérer les noms des colonnes en interrogeant la SYSIBM.SYCOLUMNS

  6. #6
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 044
    Points
    32 044
    Par défaut
    ...sinon, c'est cuit. Il n'y a pas d'introspection en COBOL(en dehors du très utile LENGTH OF, qui est quand même limité dans certains cas, particulièrement ici ou il est simplement inutile).

    J'avais déjà fait une réponse sur une question analogue, avec une proposition très proche de celle de Hédhili Jaïdane.

    Pour être sur de ne pas raconter de sottises, j'ai fait une petite recherche, et sans trouver de doc officielle, j'ai trouvé ça en Anglais.
    Citation Envoyé par Richa
    Cobol does not support introspection.
    plus loin dans le lien, certains proposent de se farcir des pointeurs dans tous les sens, mais ça n'est plus du COBOL, c'est du trafiquage de la mémoire. (attention, ensuite, ça tourne à la flamewar, seul le début du débat est interessant).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  7. #7
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Bonjour.

    @rockley

    On peut savoir sur quelle plateforme et avec quel compilateur tu travailles et si tes structures sont des tout ou partie de tables DB2 ?

  8. #8
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    Avant tout merci de m'avoir répondu. Je me sens un peu moins seule

    Pour répondre à vos questions :
    Je travaille sous Z/OS.
    Je n'ai pas la moindre idée du compilateur que les équipes de prod ont mis en place.
    Mes structures sont des copybook pour faire des échanges entre programmes. C'est malheureusement pas des champs DB2.

    Après pas mal de recherches je n'ai pas l'impression que les pointeurs puissent m'aider réellement.

    Peut-on lire des copy book comme des fichiers plats ? Ce sera complexe mais il est peut être possible de traiter les choses en faisant un "parseur".

  9. #9
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par rockley Voir le message
    Bonjour,...
    Je travaille sous Z/OS.
    .../...
    Après pas mal de recherches je n'ai pas l'impression que les pointeurs puissent m'aider réellement.

    Peut-on lire des copy book comme des fichiers plats ? Ce sera complexe mais il est peut être possible de traiter les choses en faisant un "parseur".
    Bonjour.

    Mes souvenirs du z/OS sont un peu légers, mais pour avoir développé des moulinettes de traitement de membres sources, je pense qu'il est possible d'accéder à ces sources et de les traiter.

    Dans le listing de compilation tu trouveras bien le compilateur utilisé ainsi que le détail des copy sources utilisées. Une exploitation de cette sortie de compilation d'un programme bidon incluant les copy de tes structures n'est pas à négliger.

    Et à mon humble avis, les pointeurs ne t'apporteront pas grand chose.

    Désolé de ne pas pouvoir t'aider davantage, je travaille plutôt sur les AS/400 (et compagnie).

  10. #10
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Oui, le listing de compilation présente des lignes du type

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    Source   Hierarchy and                                    Base       Hex-Displacement  Asmblr Data                    Data Def  
    LineID   Data Name                                        Locator    Blk   Structure   Definition      Data Type      Attributes
    1099     2  ZJ04. . . . . . . . . . . . . . . . . . . . BLW=00001  3E8   0 000 000   DS 0CL3638      Group      
    1100       3  XJ04-ZS01 . . . . . . . . . . . . . . . . BLW=00001  3E8   0 000 000   DS 0CL300       Group      
    1101         4  XJ04-ZLBAN. . . . . . . . . . . . . . . BLW=00001  3E8   0 000 000   DS 8C           Display    
    1102         4  XJ04-ZAPGM. . . . . . . . . . . . . . . BLW=00001  3F0   0 000 008   DS 8C           Display    
    1103         4  XJ04-ZIOAP. . . . . . . . . . . . . . . BLW=00001  3F8   0 000 010   DS 3C           Display    
    1104         4  XJ04-CDRSP. . . . . . . . . . . . . . . BLW=00001  3FB   0 000 013   DS 1C           Display    
    1105         4  XJ04-CECRMG . . . . . . . . . . . . . . BLW=00001  3FC   0 000 014   DS 2C           Display    
    1106         4  XJ04-ZCSQL. . . . . . . . . . . . . . . BLW=00001  3FE   0 000 016   DS 5C           Disp-Num   
    1107         4  XJ04-LIB20. . . . . . . . . . . . . . . BLW=00001  403   0 000 01B   DS 20C          Display    
    1108         4  XJ04-CPDET. . . . . . . . . . . . . . . BLW=00001  417   0 000 02F   DS 1C           Display    
    1109         4  XJ04-CAREQO . . . . . . . . . . . . . . BLW=00001  418   0 000 030   DS 10C          Display    
    1110         4  XJ04-FILLER . . . . . . . . . . . . . . BLW=00001  422   0 000 03A   DS 242C         Display    
    etc...
    Mais les difficultés d'exploitation de ce type de liste sont multiples :
    - plusieurs copy peuvent être utilisées pour une même description
    - les noms des rubriques peuvent changer à cause des copy replacing
    - la position de début n'est pas la meme entre 2 objets puisque le Base Locator n'est pas le même

    Seule la partie "Définition" et "Data Type" sont comparables relativement facilement, encore faut il être capable de pointer sur le début de la description dans chacun des 2 listings à comparer

    Bref rien d'évident

  11. #11
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2011
    Messages
    14
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Juillet 2011
    Messages : 14
    Points : 40
    Points
    40
    Par défaut Manipulation des noms de variables
    A ma connaissance (et, malheureusement, à mon corps défendant, pcq je n'aime pas le logiciel cité ci-après), seul WinDev (mais c'est UNIQUEMENT pour PC) permet ce genre de manipulation.

    Bien à toi et meilleurs vœux pour 2015 !

  12. #12
    Expert confirmé
    Homme Profil pro
    ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Inscrit en
    Juin 2007
    Messages
    2 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Tunisie

    Informations professionnelles :
    Activité : ANCIEN Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 096
    Points : 4 155
    Points
    4 155
    Par défaut
    Citation Envoyé par escartefigue Voir le message
    .../...
    Mais les difficultés d'exploitation de ce type de liste sont multiples :
    - plusieurs copy peuvent être utilisées pour une même description
    - les noms des rubriques peuvent changer à cause des copy replacing
    - la position de début n'est pas la meme entre 2 objets puisque le Base Locator n'est pas le même

    Seule la partie "Définition" et "Data Type" sont comparables relativement facilement, encore faut il être capable de pointer sur le début de la description dans chacun des 2 listings à comparer

    Bref rien d'évident
    Si le listing de compilation pose plus de problèmes qu'il n'en résout, je pense qu'il faudrait se tourner vers la piste des membres sources pour en extraire les noms des structures et de leurs composants par un simple programme Cobol, moyennant éventuellement un traitement des chaines de caractères.
    Je sais que cela était possible sur les ancêtres du z/OS pour l'avoir fait moi-même.

  13. #13
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 059
    Points : 38 269
    Points
    38 269
    Billets dans le blog
    9
    Par défaut
    Citation Envoyé par Hédhili Jaïdane Voir le message
    Si le listing de compilation pose plus de problèmes qu'il n'en résout, je pense qu'il faudrait se tourner vers la piste des membres sources pour en extraire les noms des structures et de leurs composants par un simple programme Cobol, moyennant éventuellement un traitement des chaines de caractères.
    Je sais que cela était possible sur les ancêtres du z/OS pour l'avoir fait moi-même.
    Je suis bien d'accord, avec juste une préférence en ce cas pour un programme REXX, plus riche en fonctions de traitement de chaines de caractères que COBOL

  14. #14
    Expert éminent sénior
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    6 803
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Décembre 2007
    Messages : 6 803
    Points : 32 044
    Points
    32 044
    Par défaut
    Citation Envoyé par rockley Voir le message
    Bonjour,

    Avant tout merci de m'avoir répondu. Je me sens un peu moins seule

    Pour répondre à vos questions :
    Je travaille sous Z/OS.
    Je n'ai pas la moindre idée du compilateur que les équipes de prod ont mis en place.
    Mes structures sont des copybook pour faire des échanges entre programmes. C'est malheureusement pas des champs DB2.

    Après pas mal de recherches je n'ai pas l'impression que les pointeurs puissent m'aider réellement.

    Peut-on lire des copy book comme des fichiers plats ? Ce sera complexe mais il est peut être possible de traiter les choses en faisant un "parseur".
    Il faut voir(puisque tu est sous Z/OS) si l'exploitation t'autorisera à mettre les bibliothèques de COPY en entrée de tes JCL.

    Si c'est le cas, c'est certainement faisable, mais avec de nombreux pièges(copy contenant une copy, copy replacing comme déjà cité, niveaux exotiques genre 88, voire, horreur, 66.....). Le COBOL n'est pas fait pour ça(il est fait, justement, pour de la programmation sur des formats statiques, ou il excelle). On peut(j'ai même codé-décodé du XML en passant outre les ordres natifs du genre XML-GENERATE, qui ne répondaient pas à mon besoin), mais c'est clairement inférieur à du REXX.

    Et surtout, pour répondre à ton besoin initial, ça ne sera pas totalement dynamique. Par exemple, le nom de la copy devra être associé en dur au fichier correspondant(à la fois dans le programme dans les cartes de la FILE SECTION, et dans le JCL).
    Les 4 règles d'airain du développement informatique sont, d'après Michael C. Kasten :
    1)on ne peut pas établir un chiffrage tant qu'on a pas finalisé la conception
    2)on ne peut pas finaliser la conception tant qu'on a pas complètement compris toutes les exigences
    3)le temps de comprendre toutes les exigences, le projet est terminé
    4)le temps de terminer le projet, les exigences ont changé
    Et le serment de non-allégiance :
    Je promets de n’exclure aucune idée sur la base de sa source mais de donner toute la considération nécessaire aux idées de toutes les écoles ou lignes de pensées afin de trouver celle qui est la mieux adaptée à une situation donnée.

  15. #15
    Membre chevronné Avatar de bernard59139
    Profil pro
    Administrateur de base de données
    Inscrit en
    Octobre 2006
    Messages
    950
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur de base de données

    Informations forums :
    Inscription : Octobre 2006
    Messages : 950
    Points : 2 064
    Points
    2 064
    Par défaut
    Il y a très longtemps, j'ai eu ce travail à faire.

    J'ai utilisé le "MOVE CORRESPONDING" avec un travail d'adaptation sur les COPY COBOL.

  16. #16
    Membre averti Avatar de rockley
    Homme Profil pro
    Inscrit en
    Décembre 2010
    Messages
    404
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Décembre 2010
    Messages : 404
    Points : 346
    Points
    346
    Par défaut
    Bonjour,

    Merci pour vos réponses. C'est triste de le dire mais il n'y a pas d'introspection en COBOL.
    Je laisse tomber la solution du parseur. Le temps que je mettrais à le faire est trop important pour que je puisse m'y investisse.

    Le "CORRESPONDING" ne correspond pas à mon besoin malheureusement

    Je n'ai rien trouvé sur le net pouvant me permettre de faire ce que je souhaite.
    Le truc qui pouvais se rapprocher le plus c'était ça. Exécuter un JCL depuis un programme cobol. Mais si je comprends bien il faut que se programme cobol soit lui même lancé par un JCL comportant le
    Etant en temps réel je ne pourrais pas le faire.

    Je pense que c'est mort

    Un grand merci pour votre aide à tous en tout cas.
    Je laisse ma question encore une semaine avant de la mettre en "résolu".

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Lire et afficher une image au format pgm
    Par didi_di dans le forum C++
    Réponses: 4
    Dernier message: 17/12/2009, 16h19
  2. Lire et afficher une image en Qt
    Par zules dans le forum Qt
    Réponses: 150
    Dernier message: 14/04/2009, 22h11
  3. Lire et afficher une image 3D (RGB)
    Par 77Camille dans le forum MATLAB
    Réponses: 1
    Dernier message: 06/06/2007, 13h09
  4. Lire et afficher une image (format TIFF)
    Par nuans dans le forum Interfaces Graphiques
    Réponses: 2
    Dernier message: 30/04/2007, 16h33
  5. [Débutante]Lire et afficher une image IRM sous C++ builder
    Par larimoise dans le forum C++Builder
    Réponses: 13
    Dernier message: 04/12/2006, 09h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo