Précédent   Forum du club des développeurs et IT Pro > Autres langages > Autres langages > Cobol
Cobol Forum d'entraide sur la programmation en langage Cobol
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 23/06/2012, 18h08   #1
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Par défaut move pic X dans S9(x)V9(y) COMP-3

Bonjour,
Je dois mettre une variable en PIC X(08) (format x.xxxxxx ou xx.xxxxx) dans une variable en PIC S9(2)V9(5) USAGE COMP-3.
J'ai essayé de faire des move avec plein de variables intermédiaires :
PIC S9(007) COMP-3.
PIC S9(2)V9(5) .
PIC 9(007).

Mais à chaque fois le move de ma variable intermédiaire dans le S9(2)V9(5) USAGE COMP-3 me donne zéro.

Auriez-vous une idée?

Merci
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2012, 19h05   #2
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

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

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
Bonjour.

Il faudrait nous indiquer ton compilateur, sa version et ton OS.

1) Tu peux utiliser fonction NUMVAL si tu l'as et ça résout le problème des deux formats possibles de ton pic x(8). varnum peut être en comp-3, ça ne dérange pas.
Code :
1
2
            compute varnum = function numval(varalphanum).
Sinon, tu peux faire ceci, mais le format doit être adapté :
Code :
1
2
3
4
5
       01  X1    pic x(8) VALUE "12.34567".                                     
       01  X11 REDEFINES X1 PIC 99.9(5).                                        
       01  X2    pic 99V9(5) COMP-3.                                            
           MOVE X11 TO X2.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 20
Vieux 23/06/2012, 19h49   #3
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Merci beaucoup,
J'utilise le mainframe d'IBM mais je n'ai pas les infos que tu me demandes sous le nez, j'essaierai ta solution au boulot lundi, au moins ça me donne de l’espoir je me suis cassée les dents dessus pendant des heures !
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 23/06/2012, 20h04   #4
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

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

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
La fonction NUMVAL existe dans z/OS Enterprise Cobol 4.1, voir ce post : http://www.developpez.net/forums/d64...s/#post3803611
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 23/06/2012, 21h21   #5
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Merci,
j'espère que j'ai la bonne version !
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 10h05   #6
Luc Orient
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 165
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 54
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 165
Points : 1 975
Points : 1 975
Citation:
Envoyé par pucelapin Voir le message
Merci beaucoup,
J'utilise le mainframe d'IBM mais je n'ai pas les infos que tu me demandes sous le nez ...
La version du compilateur est donnée dans la ligne d'en-tête (la première ligne) de la liste de compilation ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 10h24   #7
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
J'avais pris mon compte-rendu de compil, c'est ca?
1 J E S 2 J O B L O G -- S Y S T E M M U T 0 -- N O D E C A C G D U

Merci de votre aide.
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 11h19   #8
Luc Orient
Membre Expert

 
Homme François Durand
Spécialiste Delivery Mainframe IBM
Inscription : octobre 2005
Messages : 1 165
Détails du profil
Informations personnelles :
Nom : Homme François Durand
Âge : 54
Localisation : France, Seine Saint Denis (Île de France)

Informations professionnelles :
Activité : Spécialiste Delivery Mainframe IBM
Secteur : Finance

Informations forums :
Inscription : octobre 2005
Messages : 1 165
Points : 1 975
Points : 1 975
Citation:
Envoyé par pucelapin Voir le message
J'avais pris mon compte-rendu de compil, c'est ca?
1 J E S 2 J O B L O G -- S Y S T E M M U T 0 -- N O D E C A C G D U
Non ça c'est le compte-rendu JES2. De mémoire, la liste de compilation devrait se trouver dans le fichier SYSPRINT ou peut-être SYSOUT ...
Luc Orient est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 11h49   #9
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Etant donné que ma variable finale est signée est-ce que je peux faire un REDEFINE X22 ?

Code :
1
2
3
4
5
6
7
8
01  X1    pic x(8) VALUE "12.34567".                                     
01  X11 REDEFINES X1 PIC 99.9(5).                                        
01  X2    pic 99V9(5) COMP-3.                                            
01  X22 REDEFINES X2 PIC S99V9(5) COMP-3.

MOVE X11 TO X2.
MOVE X22 TO ma variable finale.

Merci
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 16h01   #10
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

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

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
Pas besoin. A la limite tu définis X2 en signé pic S99v9(5) et encore ce n'est pas nécessaire, la conversion se fera d'elle même. Tu peux envoyer le X11 ou le résultat de la fonction NUMVAL directement dans ta variable quelque soit son type numérique et son signe.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 24/06/2012, 16h51   #11
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Merci beaucoup !
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 30/06/2012, 23h12   #12
Jean GVE
Membre du Club
 
Homme Jean
Développeur Grands Systèmes IBM
Inscription : août 2008
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Jean
Âge : 60
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur Grands Systèmes IBM

Informations forums :
Inscription : août 2008
Messages : 37
Points : 45
Points : 45
Citation:
Envoyé par pucelapin Voir le message
...
Code :
1
2
3
4
5
6
7
8
01  X1    pic x(8) VALUE "12.34567".                                     
01  X11 REDEFINES X1 PIC 99.9(5).                                        
01  X2    pic 99V9(5) COMP-3.                                            
01  X22 REDEFINES X2 PIC S99V9(5) COMP-3.

MOVE X11 TO X2.
MOVE X22 TO ma variable finale.
Le contenu de la zone X1 est l'équivalent d'un "Picture d'édition" format qui ne peut servir qu'à l'édition (un cul de sac, quoi !)
Si tu as "1234567" dans un PIC x(7). par contre là le X11 en REDEFINES passe à la compilation sans erreur ce qui ne doit pas être le cas de l'exemple ci-dessus il doit au moins y avoir un Warning.
Dans ce cas un MOVE X11 TO X2 ou X22 doit fonctionner, en principe un COMP-3 ou PACKED DECIMAL à toujours un quartet supplémentaire en fin pour y loger le signe.
Pour information la virgule dans un format numérique DISPLAY ou PIC 9(n)V9(m) n'apparait pas dans la zone qui est de n+m octets. Seul le signe peut apparaitre sous forme de la transformation du dernier chiffre.
En codage EBCDIC le chiffres sont codés de "F0" à "F9" le "F" est remplacé par "C" pour un nombre positif et par "D" pour une valeur négative.
@+, j'espère que ça peut d'aider
Jean GVE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 01/07/2012, 00h07   #13
Hédhili Jaïdane
Expert Confirmé
 
Homme
Consultant/Formateur/Développeur AS/400, iSeries, System i et Cobol
Inscription : juin 2007
Messages : 1 783
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : Tunisie

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

Informations forums :
Inscription : juin 2007
Messages : 1 783
Points : 2 713
Points : 2 713
Citation:
Envoyé par Jean GVE Voir le message
Le contenu de la zone X1 est l'équivalent d'un "Picture d'édition" format qui ne peut servir qu'à l'édition (un cul de sac, quoi !)
...
Le MOVE d'un numérique édité dans tout autre catégorie de donnée, à l'exception de l'alphabétique, est autorisé sur toutes les plateformes IBM y compris les mainframes depuis le VS Cobol II. Le petit exemple que j'ai donné est vérifié sous ILE Cobol for AS/400 (et suivants) et s'applique au S/36

Citation:
Envoyé par VS Cobol II Application Programming Langage Reference
De-editing allows moving a numeric-edited data item into a numeric or
numeric-edited receiver. The compiler accomplishes this by first
establishing the unedited value of the numeric-edited item (this value
can be signed), then moving the unedited numeric value to the
receiving numeric or numeric-edited data item.
__________________

Hédhili Jaïdane est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 01/07/2012, 11h33   #14
Jean GVE
Membre du Club
 
Homme Jean
Développeur Grands Systèmes IBM
Inscription : août 2008
Messages : 37
Détails du profil
Informations personnelles :
Nom : Homme Jean
Âge : 60
Localisation : France, Hauts de Seine (Île de France)

Informations professionnelles :
Activité : Développeur Grands Systèmes IBM

Informations forums :
Inscription : août 2008
Messages : 37
Points : 45
Points : 45
Bonjour,
Tu as raison Jaïdane.
Personnellement, j'évite de parler des particularités propre à IBM cette possibilité n'étant pas dans la norme ANSI85.
Et quand on utilise (quand c'est vraiment plus pratique, quasiment indispensable) ces particularités ou possibilités apportés par normes récentes, il faut penser à mettre un commentaire pour attirer l'attention en cas d'un éventuel portable (ou pour une maintenance faite par un vieux grigou comme moi ).
Pour les débutants il est préférable d'utiliser une programmation qui fonctionne sur toutes les plates-formes. Pour convertir une chaine avec un "point décimal", mieux vaut utiliser la fonction NUMVAL comme signalé au dessus.
@+
Jean GVE est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/07/2012, 19h06   #15
pucelapin
Invité de passage
 
Femme
Développeur COBOL
Inscription : juin 2012
Messages : 7
Détails du profil
Informations personnelles :
Sexe : Femme
Localisation : France

Informations professionnelles :
Activité : Développeur COBOL
Secteur : Industrie

Informations forums :
Inscription : juin 2012
Messages : 7
Points : 0
Points : 0
Citation:
Envoyé par Jean GVE Voir le message
Pour les débutants il est préférable d'utiliser une programmation qui fonctionne sur toutes les plates-formes.
@+
Je suis bien d'accord

Citation:
Envoyé par Jean GVE Voir le message
Pour convertir une chaine avec un "point décimal", mieux vaut utiliser la fonction NUMVAL comme signalé au dessus.
@+
Je n'ai pas la bonne version pour l'utiliser

Merci de votre aide, j'ai l'habitude de développer en pl sql et on n'a pas tous ces problèmes ...
pucelapin est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 02h23.


 
 
 
 
Partenaires

Hébergement Web