h nomain copyright('Serge GOMES') h Thread(*Serialize) h Option( *SrcStmt) /COPY SERGE/PROTOTYPE,REGEXSRV /COPY SERGE/PROTOTYPE,JVMSRV D QMHSNDPM pr extPgm('QMHSNDPM') D msgID 7a const D qmsgF 20a const D msgData 80a const D msgLength 8b 0 const D msgType 10a const D msgStack 126a const D msgCounter 4b 0 const D msgKey 4a const D ErrorCode 4b 0 const D msgFile s 20a inz('QRNXMSG QSYS ') D msgID s 7a D msgType s 10a inz('*DIAG') D msgStack s 126a inz('*') D msgKey s 4a inz(' ') D msgData s 80a inz D msgLength s 8b 0 inz D PSDS SDS D EXCP_TYPE 40 42 D EXCP_NUM 43 46 D EXCP_DATA 91 170 D EXCP_ID 171 174 * Corps de la fonction PRe_match b export D pi n *on=Trouvé D W_pattern 255 VALUE varying pattern D Ptr_matcher * VALUE chaine recherchée dmatchFlags 10I 0 VALUE OPTIONS(*NOPASS) d W_replace 255A VALUE varying options(*nopass) dsubstFlags 10I 0 value options(*nopass) DW_matcher S 32700 varying based(Ptr_matcher) * * public org.apache.regexp.RE(java.lang.String,int) D RE... D pr O ExtProc(*Java: D 'org.apache.regexp.RE': D *Constructor) D o Class(*JAVA:'java.lang.String') D 10I 0 Value * boolean match(java.lang.String) D match pr N ExtProc(*Java: D 'org.apache.regexp.RE': D 'match') D matcher O Class(*Java:'java.lang.String') D re_subst pr O ExtProc(*Java: D 'org.apache.regexp.RE': D 'subst') D Class(*Java:'java.lang.String') D matcher o Class(*JAVA:'java.lang.String') D replace o Class(*JAVA:'java.lang.String') D flags 10I 0 Value * public java.lang.String(char[]) D newString pr O ExtProc(*Java:'java.lang.String': D *Constructor) D 32700A Const Varying D getBytes pr 32700A ExtProc(*Java: D 'java.lang.String': D 'getBytes') Varying * ------------------------------------------------------------------------------------------ * * Definition de Java String D pattern s O Class(*Java:'java.lang.String') D matcher s O Class(*Java:'java.lang.String') D replace s O Class(*Java:'java.lang.String') D compiledRegex s O Class(*Java:'org.apache.regexp.RE') dW_trouve s n inz(*off) /free if %parms = 2; matchFlags =0; ENDIF; if %parms = 4; substFlags=0; ENDIF; monitor; pattern = newString(W_pattern); matcher = newString(W_matcher); compiledRegex = RE(pattern:matchFlags); if (match(compiledRegex:matcher)); // Expression régulière trouvée W_trouve = *on ; if %parms > 3; replace = newString(W_replace); matcher = re_subst(compiledRegex: matcher:replace:substFlags); W_matcher=getBytes(matcher); FreeJavaObject(replace); ENDIF; endif; // libère la mémoire allouée aux objets java FreeJavaObject(compiledRegex); FreeJavaObject(pattern); FreeJavaObject(matcher); on-error *ALL; // Gestion des erreurs msgData = EXCP_DATA ; msgLength = %len(msgData) ; msgID = EXCP_TYPE + EXCP_NUM ; QMHSNDPM (msgID:msgFile:msgData:msgLength:msgType: msgstack:0:msgkey:0); endMon; return W_trouve; /end-free pre_match e *š------------------------------------------------------------------------------------ //