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
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
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 :
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.
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
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.
Bonjour,
oui je viens de la tester et ça marche ,
merci pour votre aide
Bien cordialement.
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.
Vous avez un bloqueur de publicités installé.
Le Club Developpez.com n'affiche que des publicités IT, discrètes et non intrusives.
Afin que nous puissions continuer à vous fournir gratuitement du contenu de qualité, merci de nous soutenir en désactivant votre bloqueur de publicités sur Developpez.com.
Partager