Les para­mètres en e…
 
Notifications 
Reti­rer tout

Les para­mètres en entrée et en retour sont décla­rés en var­char et que les cl n’acceptent pas ce type de variable.

Posts
Uti­li­sa­teurs
Reac­tions
98  Vu
0
Début du sujet

J’ai essayé d’utiliser la pro­cé­dure « scanR­pl » que tu avais créée pour rem­pla­cer des chaines de carac­tères depuis un pro­gramme cl.

Ça ne marche pas parce que les para­mètres en entrée et en retour sont décla­rés en var­char et que les cl n’acceptent pas ce type de variable.

Du coup j’ai mis les para­mètres en char de lon­gueur fixe et ça marche avec des variables de lon­gueur iden­tique dans le cl.

Y a‑t-il quelque chose que je n’ai pas fait bien ?

Cdlt

Denis

       // --------------------------------------------------
       // Procedure name: chn_scanRpl
       // Purpose:        Utiliser le BIF %ScanRpl par des exécutables où la ...
       //                          fonction n'existe pas exemple CLLE
       // Returns:        Chaîne résultante après remplacement de la chaîne.
       // Parameter:      p_scan_string => Chaîne de caractères à rechercher ...
       //                          et à remplacer
       // Parameter:      p_replacement => Chaîne de caractères de remplacement
       // Parameter:      p_source => Chaîne de caractères à scanner
       // Parameter:      p_scan_start => A partir de quelle position doit êt...
       //                          re recherché la chaîne de caractères à rem...
       //                          placer
       // Parameter:      p_scan_length => Longueur de chaîne à partir du sta...
       //                          rting position dans laquel est recherché l...
       //                          a chaîne à remplacer.
       // --------------------------------------------------

       DCL-PROC chn_scanRpl EXPORT;

         DCL-PI *n char(1024);
           p_scan_string char(100) const;
           p_replacement char(100) const;
           p_source char(1024) const;
         END-PI;

         dcl-s w_scanrpl like(p_source);

         w_scanrpl = %scanrpl(%trimr(p_scan_string)
                                :%trimr(p_replacement)
                                :%trimr(p_source)
                             );



         return w_scanrpl ;

       END-PROC;               

1 Réponse 
0

Salut, 

Les para­mètres de lon­gueurs variables ne sont pas très bien tolé­rés par les CL. En fait, les 2 pre­miers octets contiennent un entier conte­nant la lon­gueur du champ. Il faut uti­li­ser une redé­fi­ni­tion de la variables (DS par exemple) pour récu­pé­rer la variables correctement.

Une dis­cus­sion sur le sujet :

http://www.code400.com/forum/forum/iseries-programming-languages/clp-clle/14255-reading-varchar-fields-into-clp-clle-variable

A plus,

Oli­vier.

Scanr­pl est sur Github.

Share :