Utilisation de regexp_like en rpgle

RPG (3 et 4, free), CL, SQL, etc...
Répondre
manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

Utilisation de regexp_like en rpgle

Message par manae »

bonjour,

Dans un programme rpgle, j'aurais à valider un zone texte contenant une adresse email venant d'une saisie à l'écran.
Pour simplifier le programme je voulais utiliser la fonction regexp_like
mais je n'arrive pas à utiliser cette fonction en SQLRPGLE.

mon code ci-dessous ne compile pas

cordialement

Code : Tout sélectionner

     H dftactgrp( *no ) decedit('0,')
     FTEST      CF   E             WORKSTN
     dexp                            45
     dxflag                            N
      /free
       exp='([a-zA-Z\d]{1}[\w\.-]+\@[\w\.-]+\.[a-zA-Z]{2,6})';
       dou *in03;
        exfmt test1;
        exec sql set :xflag=REGEXP_LIKE(:wemail,:exp);
        if xflag;
          wmess='Adresse email valide ...';
        else;
          wmess='Adresse email incorrecte ...';
        endif;
       enddo;

       *inlr=*on;
      /end-free    

cmasse
Site Admin
Messages : 813
Enregistré le : mer. 14 févr. 2007, 18:00:03
Localisation : Nantes
Contact :

REGEXP_COUNT

Message par cmasse »

REGEXP_LIKE est un prédicat pas une fonction , ce qui veut dire qu'il ne peux être utilisé que dans une clause WHERE.


Utilisez à la place REGEXP_COUNT() qui est une fonction qui retourne le nbr de fois ou une expression régulière est vraie, 0 dans le cas contraire.
Christian Massé (Volubis.fr)

manae
Messages : 58
Enregistré le : mar. 21 juin 2011, 07:08:24

Message par manae »

Bonjour,

j'ai trouvé le code pour utiliser REGEXP_LIKE !!!
je met le code ci-dessous avec l'expression régulière qui fonctionne
si cela peut etre utile à quelqu'un et l’écran si vous voulez tester !!!

Cordialement

Code : Tout sélectionner

#--ecran TEST --------------------------------------------------------
     A          R TEST1                                                            
     A                                      CF03(03)                       
     A                                  9  7'Email'                        
     A            WEMAIL        60A  B  9 14DSPATR(HI)                     
     A            WMESS         40A  O 14 14                               
#-----------------------------------------------------------
     H dftactgrp( *no ) decedit('0,')
     FTEST      CF   E             WORKSTN
     dex               s             72
     dxflag            s              1  0
      /free
       ex='^([a-zA-Z0-9]{1}[a-zA-Z0-9\.\-_]+\@[a-zA-Z0-9\.\-_]+\.[a-zA-Z]{2,6}\+
       s*)$'; 
       dou *in03;
        exfmt test1;
          exec sql set
            :xflag=case when REGEXP_like(:wemail,:ex) then 1 else 0 end ;
        if xflag<>0;
          wmess='Adresse email valide ...';
        else;
          wmess='Adresse email incorrecte ...';
        endif;
       enddo;

       *inlr=*on;
      /end-free               

Répondre