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 :

[z/OS] Redéfinition d'une map


Sujet :

Cobol

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut [z/OS] Redéfinition d'une map
    bonjour à tous.

    Je developpe un petit programme applicatif sous Z/OS - CICS en utilisant un écran formaté ( par BMS ).
    Mes nom de map sont imposés par le cahier des charges: mapxxxx

    J'ai donc, dans ma working-storage section, un:
    Dans un soucis de clareté du code, j'aimerais redefinir mon nom de map.
    Commençons par un simple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     01 m-creation PIC X(7) VALUE 'MAPXXXX'.
    ainsi mes CICS SEND MAP et CICS REVEIVE MAP sont plus compréhensibles.

    Poursuivant ainsi, le drame .... comment redéfinir mes MAPXXXXI et MAPXXXXO alors que je ne connais pas la taille de ces structures ? ( j'utilise MOVE LOW-VALUE TO MAPXXXXO dans ma PROCEDURE DIVISION. )

    Suis-je obligé de passer un coup de pré-compilateur pour connaitre et mettre 'en dur' la taille de mes structures données par BMS lors d'un REDEFINES ?

    Pour l'instant je me contente d'un petit commentaire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    * A faire: Modifier dans le code les 'mapxxxxI' et 'mapxxxxO'


    Merci de l'aide que vous pourrez m'apporter

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Bonjour,

    Ta définition de map est incluse dans ton code par le biais d'une copy générée à partir du BMS.

    Rien ne t'empêche de coder un "REPLACING" dans ta clause copy, ça ne modifie pas le nom de la map pour CICS.

  3. #3
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    J'ai bien peur que les notions de MAP logique (la COPY) et de map Physique (le programme) généré par BMS ne soient confondues.
    Pour ce dont je me souviens, Les suffixes I et O sont bien générés dans la COPY BMS aussi bien pour la zones élémentaires que pour le niveau groupe.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    Citation Envoyé par Homer-ac Voir le message
    J'ai bien peur que les notions de MAP logique (la COPY) et de map Physique (le programme) généré par BMS ne soient confondues.
    Justement non, c'est bien pour cela que je préconise de faire un replacing sur la copy (MAP physique), ce qui n'a pas d'incidence sur CICS à qui on communique le nom de la MAP logique dans les ordre SEND / RECEIVE MAP(MAPxxxx).

    Il suffit de coder :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    COPY MAPxxxx REPLACING
       ==MAPxxxxI== by ==ZZZZZZZI==,
       ==MAPxxxxO== by ==ZZZZZZZO==.

  5. #5
    Membre confirmé Avatar de Homer-ac
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    449
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 449
    Points : 586
    Points
    586
    Par défaut
    désolé FREMEN167, je ne pensais pas à ta réponse parfaitement claire mais au post d'origine
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ainsi mes CICS SEND MAP et CICS REVEIVE MAP sont plus compréhensibles.

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2007
    Messages
    362
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2007
    Messages : 362
    Points : 419
    Points
    419
    Par défaut
    OK, pas de soucis.

    Mais j'ai l'impression que holderheck, dans cette phrase, évoquait le fait qu'il peut transmettre dans MAP(zzzz) la variable contenant le nom de la MAP au lieu du nom lui-même, et donc le fait que la partie MAP physique était résolue.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    14
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 14
    Points : 10
    Points
    10
    Par défaut
    Oui c'est tout à fait celà, fremen167 ^^

    Quand au COPY REPLACING, c'est exactement ce qu'il me fallais, milles merci

  8. #8
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par fremen167 Voir le message
    Bonjour,

    Ta définition de map est incluse dans ton code par le biais d'une copy générée à partir du BMS.

    Rien ne t'empêche de coder un "REPLACING" dans ta clause copy, ça ne modifie pas le nom de la map pour CICS.
    Bonjour,

    Qu'est-ce qu'une clause copy en cobol ? Pouvez-vous m'expliquer avec un exemple si possible (sachant que je suis débutant en cobol et habitué à la programmation orientée objet ...).

    J'ai recherché sans grand résultat une explication de ces termes "clause copy" mais sans résultat sur internet et donc ce forum

    Merci d'avance.

  9. #9
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par tidou Voir le message
    ...
    Qu'est-ce qu'une clause copy en cobol ? Pouvez-vous m'expliquer avec un exemple si possible (sachant que je suis débutant en cobol et habitué à la programmation orientée objet ...).

    J'ai recherché sans grand résultat une explication de ces termes "clause copy" mais sans résultat sur internet et donc ce forum ...
    C'est simplement un fragment de texte de programme ( déclaration de variables ou instructions ) à inclure dans le programme avant compilation ...

    Souvent pour ce type de mécanisme on parle de pré-processeur ou pré-compilateur, puisque on se situe avant la phase de compilation ...

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    Par défaut
    Citation Envoyé par Luc Orient Voir le message
    C'est simplement un fragment de texte de programme ( déclaration de variables ou instructions ) à inclure dans le programme avant compilation ...

    Souvent pour ce type de mécanisme on parle de pré-processeur ou pré-compilateur, puisque on se situe avant la phase de compilation ...
    ok hmmm. Tu n'aurai pas un exemple de code stp car même si ça paraît simple, concrètement j'aimerai voir le résultat ou l'utilité.

    C'est pour éviter de redéfinir à chaque fois les mêmes structures / variables ?

  11. #11
    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 056
    Points
    32 056
    Par défaut
    oui. On peut utiliser le COPY ou l'INCLUDE(dont le fonctionnement est similaire, mais j'aime moins).

    la principale utilisation d'une COPY, c'est pour des définitions de données. Exemple ou PAR-APPL contient les paralètres d'appel du programme 'MODULE'
    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
    programme appelant :
    
    WORKING STORAGE SECTION.
    ...
    COPY PAR-APPL
    ...
    remplissage PAR-APPL
    ...
    CALL 'MODULE' USING PAR-APPL
    
    Programme appelé :
    
    LINKAGE SECTION
    COPY PAR-APPL
    en bref : depuis ton programme appelant tu as rempli un certains nombre de données(définies dans la copy PAR-APPL), que tu as transféré au programme appelé. Quand le programme appelé rend la main(par un ordre GOBACK), le programme appelant peut utilisé le contenu de PAR-APPL tel qu'il a été modifié.

    Avantage : à chaque nouveau programme appelant, pas besoin de se retaper la définition de la LINKAGE du programme appelé. Et puis c'est plus maintenable.

    on peut aussi mettre du COPY avec du code, mais j'aime pas.
    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.

  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
    Bonjour.

    Pour faire simple, l'instruction (on parle de clause, pour ne pas confondre avec les instructions exécutables) COPY permet tout simplement d'inclure du source dans le source en cours à l'endroit où le COPY est écrit. Ca peut être n'importe quels genres de source que l'on ne peut pas ou on ne veut pas réécrire dans le source en cours.

    L'exemple le plus courant est celui des descriptions des fichiers. ET pour ne pas réécrire ET pour ne pas se tromper au moment de la retranscription ET pour que tous les progtrammeurs utilisent la même description. Un autre exemple courant, celui des paramètres de sous-programmes, des morceaux (pavés) de programme, de WSS, de linkage section, de screen section, etc.... Dans certains compilateurs, ça sert aujourd'hui pour inclure les eescriptions externes des fichiers DB, fichiers Ecrans (map cics, ...), etc....

    Le COPY est destiné au compilateur pour lui dire de copier ce qu'on lui demande avant de compiler.

    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    000010*01  RECAP.RCD Description fichier RECAP des rubriques de paie
    000020*long=76
    000030*Cl‚ primaire = CLE
    000000*
    000090     05 CLE.
    000000        07 AAPER        pic 99.
    000000        07 MMPER        pic 99.
    000000        07 QQPER        pic 9.
    000100        07 CENTRE       pic xxx.
    000110        07 MLE          pic x(7).
    000000        07 NUMLIG       PIC 99.
    000000     05 AADU     pic 99.
    000000     05 MMDU     pic 99.
    000000     05 JJDU     pic 99.
    000000     05 AAAU     pic 99.
    000000     05 MMAU     pic 99.
    000000     05 JJAU     pic 99.
    000000     05 TYPEPAIE pic x.
    000000     05 MODEMPL  pic x.
    000000     05 ORIGINE  pic x.
    000000*         origine de la rubrique (cas de rappel d'une rub. fixe)
    000000*               P=Pointage, F=Fixe, G=G‚n‚rale
    000000     05 RUBRIQ   pic xxx.
    000000     05 TYPERUB  pic x.
    000000     05 INDRAP   pic x.
    000000*                       =R si rappel
    000000     05 INDACT   pic x.
    000000*                       =D si d‚sactiv‚
    000000     05 INDCALC  pic x.
    000000*                       =C si calcul effectu‚
    000000     05 TXMTBASE pic 9(6)v999.
    000000     05 NBRUB    pic 9(6)v999.
    000000     05 TXRUB    pic 9(4)v9(5).
    000000     05 MTRUB    pic s9(6)v999.
    000000*
    000000     05 filler   pic x.
    et dans le programme, au lieu d'écrire tout ça, on fait COPY.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    ...
    000820 FD  RECAP.
    000830 01  RECAP-RCD.
    000840     copy "RECAP.RCD".
    ...

  13. #13
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    Par défaut
    Ok merci à vous !

    Juste une chose :

    à quoi sert la 1ère de ces 2 lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    000820 FD  RECAP.
    000830 01  RECAP-RCD.
    FD pour File Descriptor ? Mais pourquoi pas un numéro de niveau au lieu du FD ? Bref je ne vois pas ce que ça permet.

  14. #14
    Membre expert
    Homme Profil pro
    Retraité
    Inscrit en
    Octobre 2005
    Messages
    1 473
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 65
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Finance

    Informations forums :
    Inscription : Octobre 2005
    Messages : 1 473
    Points : 3 283
    Points
    3 283
    Par défaut
    Citation Envoyé par tidou Voir le message
    ...
    à quoi sert la 1ère de ces 2 lignes ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    000820 FD  RECAP.
    000830 01  RECAP-RCD.
    FD pour File Descriptor ? ...
    Bref je ne vois pas ce que ça permet.
    FD pour FILE DESCRIPTION c'est le nom du fichier dans le programme (on parle parfois de nom "interne").

    Il va être utilisé par tous les verbes d'entrée-sortie (OPEN / READ / CLOSE ) sauf WRITE (qui utilise lui le nom de l'enregistrement).

    Le nom interne est associé à un nom externe (conforme aux règles d'écritures du système d'exploitation associé au programme) dans l'ENVIRONMENT DIVISION / INPUT-OUTPUT SECTION / paragraphe FILE CONTROL par une clause SELECT.

    Par exemple et en z/OS, c'est le DD NAME de la carte DD qui est le nom externe.

    Mais pourquoi pas un numéro de niveau au lieu du FD ?
    C'est une pure convention d'écriture.
    Si on voit la description d'un fichier avec ses numéros de niveau comme une arborescence, alors l'entrée FD est le sommet de l'arbre ...

  15. #15
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2003
    Messages
    99
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2003
    Messages : 99
    Points : 72
    Points
    72
    Par défaut
    Ok merci ce fus très clair

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 26/05/2005, 16h40
  2. Inserer des elements dans une map sans rangement ?
    Par Muetdhiver dans le forum C++
    Réponses: 3
    Dernier message: 07/09/2004, 12h09
  3. problème de références _ptr dans une map STL
    Par Mr_Tyu dans le forum CORBA
    Réponses: 1
    Dernier message: 10/08/2004, 11h39
  4. [ MAP ] Choix d'une MAP
    Par mawashee dans le forum Collection et Stream
    Réponses: 2
    Dernier message: 09/08/2004, 17h39
  5. Technique pour faire une map en relief
    Par rvzip64 dans le forum OpenGL
    Réponses: 4
    Dernier message: 28/06/2004, 23h44

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