PDA

View Full Version : Reguläre Ausdrücke prüfen - suche Beispielprogramm



willi77
16-09-10, 16:46
Hallo,

ich versuche gerade mit den C Routinen (regcomp, regexec...) in einem ILERPG Programm gültige Werte über einen regulären Ausdruck abzufragen. Ich habe auch ein Beispielprog., das funktioniert aber nicht wenn der reg. Ausdruck mehere Teilausdrücke hat, oder Wiederholungen {n}

Hat jemand so ein Beispielprogramm, das einen kommpletten RegAusdruck überprüft? :)

Fuerchau
17-09-10, 07:59
Das Problem hierbei ist die CCSID.
Das Problem hatten wir hier schon mal irgendwo, dass regcmp und regex auf die aktuelle locale gehen, wenn diese nicht gesetzt ist, ist der Default 037.

Die Zeichen "{}" nebst vielen anderen sind leider CCSID-abhängig.

willi77
17-09-10, 13:56
Ich habe den Artikel durchgelesen, und habe die Umgebungsvariable mit
ADDENVVAR ENVVAR(LANG) VALUE('QSYS.LIB/DE_DE.LOCALE') CCSID(273) gesetzt, ich bekomme in meinem Programm den Wert und den Ausdruck über Parmeter ins Programm. Muss ich diese Werte dann auch noch konvertieren ?

Fuerchau
17-09-10, 14:34
Das kommt darauf an, woher die Ausdrücke stammen.
Werden diese auch aus einer DB gelesen ?
Hat diese DB eine CCSID ?
Hat dein Job eine CCSID ungleich 65535 ?

Bei invarianten Zeichen gibt's immer Probleme, wenn die Quell-CCSID nicht klar definiert ist.

willi77
25-10-10, 10:40
Ich habe mein Problem immer noch nicht gelöst!
Denke das liegt an der CCSID des Programm´s, mein Modul hat CCSID 273, aber mein Programm 65535.
Wie bekomme ich das Programmobjekt auch auf CCSID 273 ? :confused:

Fuerchau
25-10-10, 11:08
Bei ILE hat das Programmobjekt immer CCSID 65535, die einzelnen Module dann die entsprechende Quell-CCSID.

Das ist aber nicht dein Problem.
Zum Them RegEx hatten wir hier im Forum schon mal einen Beitrag.
Du musst die Locale zur Laufzeit setzen, sonst nimmt RegEx 037 an oder du musst deinen Ausdruck und den Vergleichswert von der JobCCSID in 037 codewandeln.