J’ai essayé d’utiliser la procédure « scanRpl » que tu avais créée pour remplacer des chaines de caractères depuis un programme cl.
Ça ne marche pas parce que les paramètres en entrée et en retour sont déclarés en varchar et que les cl n’acceptent pas ce type de variable.
Du coup j’ai mis les paramètres en char de longueur fixe et ça marche avec des variables de longueur identique 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;
Salut,
Les paramètres de longueurs variables ne sont pas très bien tolérés par les CL. En fait, les 2 premiers octets contiennent un entier contenant la longueur du champ. Il faut utiliser une redéfinition de la variables (DS par exemple) pour récupérer la variables correctement.
Une discussion sur le sujet :
A plus,
Olivier.
Scanrpl est sur Github.