Bonjour,
Je suis trés novice en AS/400 et cobol.
j'ai un fichier sur as/400 contenant des données cobol de type comp-3.
je voudrais savoir comment faire pour transformer ces données en des données numériques signées.
Merci d'avance
Bonjour,
Je suis trés novice en AS/400 et cobol.
j'ai un fichier sur as/400 contenant des données cobol de type comp-3.
je voudrais savoir comment faire pour transformer ces données en des données numériques signées.
Merci d'avance
Bonjour.
Il suffit de faire un Move de la zone comp-3 vers la zone numérique étendue. Ce n'est pas propre ni à Cobol ni à l'AS/400.
exemple
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 ..... 01 VALEUR-ANCIENNE PIC S9(7) COMP-3. 01 VALEUR-NOUVELLE PIC S9(7). ..... MOVE VALEUR-ANCIENNE TO VALEUR-NOUVELLE
Les zones au format COMP-3 (COMPUTATIONAL-3) sont déjà numériques. Il s'agit de données au format "décimal condensé", encore appelé "packé", qui contient 2 chiffres par octet avec le demi-octet le plus à droite réservé au signe (sur AS/400 : "F" --> signe plus ou valeur absolue, "D" --> signe moins).Envoyé par Kirou
Un MOVE n'est utile que si on veut convertir ces zones du format décimal condensé au format décimal étendu, c'est à dire un chiffre par octet. Même remarque à propos du signe pour ce format.
La présence du signe est conditionnée par la PICTURE qui est déclarée avec ou sans le "S" pour le signe. Les valeurs des zones dont la picture est déclarée sans le "S" sont en valeur absolue (non signées --> signe "F").
Exemple :
Valeur "123456" dans une zone signée de 7 chiffres au format packé (PIC S9(7) COMP-3 --> "01.23.45.6F"). Cette zone n'occupe en fait que 4 octets en mémoire et les valeurs limites pouvant y être contenues varient de -9999999 à +9999999 (7 chiffres), soit de 99.99.99.9D à 99.99.99.9F.
Valeur "123456" dans une zone signée de 7 chiffres au format décimal étendu (PIC S9(7) --> "F0.F1.F2.F3.F4.F5.F6"). Cette zone occupe tous les 7 octets en mémoire et les valeurs limites pouvant y être contenues sont les mêmes que pour le format packé. Elles varient donc de -9999999 à +9999999 (7 chiffres), soit de F9.F9.F9.F9.F9.F9.D9 à F9.F9.F9.F9.F9.F9.F9.
petite précision à ce qui est écrit au-dessus : si "D"(débit) veut dire moins, "C"(crédit) veut dire plus, et "F" non signé(donc plus aussi). Cette information inutile vous était offerte par le pichouilleur de service.....
Bonjour.
Un petit complément à ce qu'ont dit Mercure et el_slapper qui ont tous les deux raison.
En interne l'AS/400 utilise le "F" et le "D" et reconnait en externe le "C" et le "F" pour les positifs et le "D" pour les négatifs et ce aussi bien pour l'Usage Display que le Comp-3. Ce n'est pas tout d'ailleurs.
A méditer :
Envoyé par Doc IBM
Une autre petite précision sur la petite précision apportée ci-dessus
C'est sur les mainframes qu'on trouve le code signe "C" pour "plus", pas sur AS/400-iSeries-System i. Autrement dit, ce dernier OS ne connaît pas "C" et met "F" à la place, comme pour la valeur absolue (non signé). Toutefois, et c'est là que réside la petite précision supplémentaire, cet OS "sait" lire les zones qui sont signées "C", mais soyez ultra prudents et conscients que si elles sont destinées à être déclarées en tant que zones clé dans une table ou fichier, le signe "C" peut vous jouer de (vilains) tours. Aussi, de préférence, convertir le "C" en "F" avant d'alimenter les clés.
4è Niveau de précision :
Tu as raison, sauf qu'à partir du moment où la donnée réside sur l'AS/400, il n'y aura que le "F" et le "D" (Représentation interne). Les autres sont pour la repésentation externe.
Given X’sd’, where s is the sign representation and d represents the digit, the valid sign representations for external decimal (USAGE DISPLAY) without the SIGN IS SEPARATE clause) are :
Positive: A, C, E, and F.
Negative: B and D.
Juste pour noter que si la règle de gestion des signes est dépendante de la plateforme, elle l'est aussi des options de compilations installées avec le ompilateur COBOL, justement pout tenter d'assurer autant que possible la compatibilité avec des sources externes. C'est le cas sur z/OS avec l'option de compilation NUMPROC PFD/NOPFD ou MIG, spécifiquement pour la gestion des signes des données en COMP-3. Je suis à peu près certain que Hédhili Jaïdane pourra noter une option de compilation approchante sur AS/400.
Effectivement il y a une option de compilation ou directive dans process :
CHGPOSSGN : permet de mettre un "C" à la place du "F" pour l'enregistrement des nombres positifs.
Par défaut c'est NOCHGPOSSGN pour mettre un "F" (option par défaut du système d'exploitation).
Cette option est apparue dans le Ile Cobol avec la V3R1. Elle s'applique aux MOVE, ADD, SUBTRACT, MULTIPLY, DIVIDE, COMPUTE, INITIALIZE et VALUE.
Personnellement, j'essaie toujours et autant que faire se peut d'utiliser les options par défaut sauf dans des cas de traitements exceptionnels.
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