Page 1 sur 1

RPGLE parametres alphanumerique long

Posté : mer. 10 juin 2015, 07:49:10
par manae
Bonjour,

Nous avons un problème avec les paramètres alpha en rpgle.
exemple

Code : Tout sélectionner

 DART0010          PR                  extpgm('ART0010') 
D                               50A 
D                               50A     
D* 
DART0010          PI 
D XCODRT                        50A                                        Code retour 
D XLIBRT                        50A                   

 C* 
  /free 

   XLIBRT=%trim('libelle en dur dans le code codelib bbbbbb610derX2A'); 
   XCODRT=%trim('Code en dur dans le code5678901234567890123456789A'); 

   dump(a); 
   *InLR=*on; 

  /end-free
 dans le dump
 NOM                   ATTRIBUTS            VALEUR                                                                                 
_QRNL_PRMCPY_XCODRT   POINTER              SPP:C08866B1BA001646                                                                   
_QRNL_PRMCPY_XLIBRT   POINTER              SPP:C08866B1BA001667                                                                   
_QRNL_PSTR_XCODRT     POINTER              SPP:C08866B1BA001646                                                                   
_QRNL_PSTR_XLIBRT     POINTER              SPP:C08866B1BA001667                                                                   
XCODRT                CHAR(50)             'Code en dur dans le code5678901234567890123456789A'                                   
                      VALUE IN HEX         'C39684854085954084A49940848195A24093854083968485F5F6F7F8F9F0F1F2F3F4F5F6F7F8F9F0'X   
                        41                 'F1F2F3F4F5F6F7F8F9C1'X                                                               
XLIBRT                CHAR(50)             '4567890123456789Ans le code codelib bbbbbb610derX2'                                   
                      VALUE IN HEX         'F4F5F6F7F8F9F0F1F2F3F4F5F6F7F8F9C195A2409385408396848540839684859389824082828282'X   
                        41                 '8282F6F1F0848599E7F2'X                                                               
* * * * *   F I N  D E  C L I C H E  R P G  * * * * *              
En retour nous avons le XCODRT juste et le début du XLIBRT avec les 17 derniers caractères du XCODRT.
Nous avons l'impression que les deux chaînes se chevauchent.
Comment peut on résoudre ce problème ?

Cordialement

Posté : mer. 10 juin 2015, 13:31:44
par cmasse
Les passages de paramètres sont fait par pointeur.

cela est complément transparent quand un PGM appel un PGM, mais pose un problème quand vous appelez depuis la ligne de commande. Est-ce le cas ?

je crains que oui, dans ce cas, la commande CALL stocke les données transmises dans un espace temporaire et passe l'adresse où elle a stocké (les pointeurs).

la question est comment stocker ? la réponse est pour le numérique 15,5, pour le char 32 minimum, la lg de la chaine si vous transmettez plus que 32c.


si vous faites l'appel en passant deux fois espace, c'est donc 32 (et pas 50 !)

d’ailleurs la différence entre _QRNL_PSTR_XLIBRT et _QRNL_PSTR_XCODRT est de 21 en décimal, soit 33 en Héxa (32 + 1 de décalage)

essayez de faire le CALL en passant "50 espaces + un" (* par exemple)

Posté : mer. 10 juin 2015, 16:46:46
par manae
le problème c'est que l'appel a été fait à partir d'un cl, et que le les valeurs de retours dans le CL ne sont pas bonnes.
Un dump du cl le confirme.
Le code ( très simple) utilisé pour l'appel, ci-dessous.

Cordialement,

Code : Tout sélectionner

   
             PGM        PARM(&CCODRET &CLIBRET)                               
                                                                              
             DCL        VAR(&CCODRET) TYPE(*CHAR) LEN(50)                     
             DCL        VAR(&CLIBRET) TYPE(*CHAR) LEN(50)                     
                                                                              
             CALL       ART0010 PARM(&CCODRET &CLIBRET)                       
             dmpclpgm                                                         
             ENDPGM

Posté : mer. 10 juin 2015, 16:57:26
par cmasse
OUi, mais le CL reçoit lui même les paramètres, n'est-il pas appelé depuis la ligne de commandes? (auquel cas le problème reste le même !!)

Posté : jeu. 11 juin 2015, 08:00:51
par manae
Oui, effectivement vous avez raison.
Il faut faire attention aux paramètres passés en ligne de commande.

Merci
Bonne journée
Cordialement.