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

z/OS Discussion :

Charactère vers Hexadecimal


Sujet :

z/OS

  1. #1
    Membre du Club Avatar de walacouper
    Inscrit en
    Avril 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2009
    Messages : 93
    Points : 65
    Points
    65
    Par défaut Charactère vers Hexadecimal
    Bonjour,

    Je voulais convertir une chaine de charactere de PIC X(05) au hexadecimal ,

    Avez vous une commande cobol qui pourra faire

    D'avannce , merci pour votre retour
    Bien cordialement

  2. #2
    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
    je ne suis pas certain de comprendre. Si la question est bien comment afficher en clair de l'hexadécimal en COBOL, dans un display en particulier, il y a plusieurs moyens. Le moyen 'propre' : une table de traduction hexa vers sa représentation affichable, en fonction des plateformes : ASCII ou EBCDIC.
    Spécifiquement en COBOL z/OS (donc pour une représentation EBCDIC) on peut procéder en passant par une zone étendue en simulant du packé sur la longueur de la zone +1, histoire de s'affranchir de la gestion du signe sur le dernier caractère :
    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
     
              05 DATA6                                pic  x(06).
              05 DATA6-PACKE   redefines DATA6        pic  9(11) COMP-3.
              05 ZONE11-ETENDU                        pic  9(11)
    ...........................
          *----------------------------------------*
          * Convertion de 5 octets hexa            *
          * En valeur affichable sur 10 caracteres *
          *----------------------------------------*
           AFFICHER-MOT-HEXA.
               Move    MY-DATA(1:5)       to DATA6(1:5)
               Move    DATA6-PACKE        to ZONE11-ETENDU
               Inspect ZONE11-ETENDU converting x'FAFBFCFDFEFF' to 'ABCDEF'
          * Dernière position non significative à blanc  
               Move    X'40'              to ZONE11-ETENDU(11:1)
               Display 'MY-DATA = ' ZONE11-ETENDU
    Puisque la question était posée sur le sous forum zOS, cet exemple ne vaut bien entendu que pour COBOL MVS en codification EBCDIC donc. Pour autant elle aurait mieux sa place dans le forum COBOL, même si ceci reste très spécifique de la codification EBCDIC.
    Enfin, je ne peux me permettre cet exemple que pour le compilateur Enterprise COBOL z/OS par ce que j'en connais le généré assembleur. C'est limite risqué si par exemple on déclare DATA6-PACKE pic S9(11) COMP-3 , on risque alors fortement un Abend S0C7.
    Encore une fois, une solution plus portable reste une table de transposition en clair.

  3. #3
    Membre du Club Avatar de walacouper
    Inscrit en
    Avril 2009
    Messages
    93
    Détails du profil
    Informations personnelles :
    Âge : 40

    Informations forums :
    Inscription : Avril 2009
    Messages : 93
    Points : 65
    Points
    65
    Par défaut
    Bonjour,

    oui je viens de la tester et ça marche ,

    merci pour votre aide

    Bien cordialement.

  4. #4
    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
    Ca marche sur z/OS mais ça n'a rien de portable sur d'autres plateformes.
    Un module dédié COBOL reste préférable pour faire ça de façon je pense, universelle et en tout cas plus simple et moins risqué à utiliser, même si le code est optimisé spécifiquement pour Enterprise COBOL z/OS dans cet exemple :
    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
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
           Identification Division.
           PROGRAM-ID. DISPLHEX.
    
          *--------------------------------------------------------------*
          * RESTITUTION POUR AFFICHAGE D'UNE DONNEE HEXADECIMALE         *
          * Appel :                                                      *
          * CALL "DISPLHEX" USING ZIN ZOUT BY CONTENT LENGTH OF ZIN      *
          * . ZIN :  DONNEE HEXADECIMALE                                 *
          * . ZOUT : REPRESENTATION AFFICHABLE DE LA DONNEE              *
          * . LE 3ème PARAMETRE DONNE LA LONGUEUR ZIN (LG ZOUT = ZIN * 2)*
          * Remarque :                                                   *
          * (Code optimisé pour performances du généré Enterprise COBOL) *
          * (On se limite à 32K-1 = 32767 maxi pour un généré            *
          *  d'instructions registres en MVS, les plus performantes)     *
          *--------------------------------------------------------------*
    
          *------------------------
           Data Division.
    
           Working-Storage Section.
          *------------------------
           01.
               05  WS-IIN              Pic S9(4) Comp.
               05  WS-IOUT             Pic S9(7) Comp.
               05  WS-OOUT             Pic S9(7) Comp.
               05  WS-TAB-INDX.
                   10 WS-TAB-IND       Pic s9(4) Comp.
    
           01  WS-TAB.
               05   Pic X(32) Value '000102030405060708090A0B0C0D0E0F'.
               05   Pic X(32) Value '101112131415161718191A1B1C1D1E1F'.
               05   Pic X(32) Value '202122232425262728292A2B2C2D2E2F'.
               05   Pic X(32) Value '303132333435363738393A3B3C3D3E3F'.
               05   Pic X(32) Value '404142434445464748494A4B4C4D4E4F'.
               05   Pic X(32) Value '505152535455565758595A5B5C5D5E5F'.
               05   Pic X(32) Value '606162636465666768696A6B6C6D6E6F'.
               05   Pic X(32) Value '707172737475767778797A7B7C7D7E7F'.
               05   Pic X(32) Value '808182838485868788898A8B8C8D8E8F'.
               05   Pic X(32) Value '909192939495969798999A9B9C9D9E9F'.
               05   Pic X(32) Value 'A0A1A2A3A4A5A6A7A8A9AAABACADAEAF'.
               05   Pic X(32) Value 'B0B1B2B3B4B5B6B7B8B9BABBBCBDBEBF'.
               05   Pic X(32) Value 'C0C1C2C3C4C5C6C7C8C9CACBCCCDCECF'.
               05   Pic X(32) Value 'D0D1D2D3D4D5D6D7D8D9DADBDCDDDEDF'.
               05   Pic X(32) Value 'E0E1E2E3E4E5E6E7E8E9EAEBECEDEEEF'.
               05   Pic X(32) Value 'F0F1F2F3F4F5F6F7F8F9FAFBFCFDFEFF'.
    
          *----------------
           Linkage Section.
          *----------------
           01  LS-IN               Pic x(320000).
           01  LS-OUT              Pic x(640000).
           01  LS-LENGTH.
               05 LS-NULL          Pic  x(2).
               05 LS-LNG           Pic s9(4) Comp.
    
          *------------------------------------------------
           Procedure Division Using LS-IN LS-OUT LS-LENGTH.
    
          *         '??' si erreur d'appel : longueur < 0 > 32767
               Move '??'                 to LS-OUT(1:2)
               Move Low-value            to WS-TAB-INDX
               If LS-LNG  > 0 and LS-NULL = Low-Value
                  Perform varying WS-IIN from 1 By 1 Until WS-IIN > LS-LNG
    
                     Move LS-IN(WS-IIN:1) to WS-TAB-INDX(2:1)
          *                  WS-IOUT -> Déplacement sur poste table transpo
                     Compute WS-IOUT    = (WS-TAB-IND + WS-TAB-IND) + 1
          *                  WS-OOUT -> Déplacement pour restitution
                     Compute WS-OOUT    = (WS-IIN     + WS-IIN)     - 1
                     Move WS-TAB(WS-IOUT:2)   to LS-OUT(WS-OOUT:2)
    
                  End-Perform
               End-If
    
               GOBACK.
           End Program DISPLHEX.

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

Discussions similaires

  1. Hexadecimal vers adrese IP
    Par colorid dans le forum Langage
    Réponses: 9
    Dernier message: 24/02/2012, 15h15
  2. Pourquoi les couleurs hexadecimals tendent vers le bleu ?
    Par Coussati dans le forum Débuter
    Réponses: 4
    Dernier message: 03/06/2008, 11h37
  3. conversion hexadecimal vers string
    Par acognard dans le forum C#
    Réponses: 1
    Dernier message: 16/10/2007, 16h30
  4. Réponses: 2
    Dernier message: 30/05/2002, 10h19
  5. Réponses: 1
    Dernier message: 13/05/2002, 09h19

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