×
The internal search function is temporarily non-functional. The current search engine is no longer viable and we are researching alternatives.
As a stop gap measure, we are using Google's custom search engine service.
If you know of an easy to use, open source, search engine ... please contact support@midrange.com.
Today I figured out a few more things, which do not help with the actual problem, but which were not clear to me in the past.
regcomp() requires the pattern in the CCSID of the locale that is specified at the LANG environment variable. The LANG environment variable is initialized at job creation time from the value of the LOCALE parameter of the user profile. The associated CCSID of the job's locale can be retrieved with nl_langinfo(CODESET).
regexec() requires the string value, that is compared against the compiled regular expression pattern, in the CCSID returned by nl_langinfo(CODESET).
Therefore, from my current understanding, it is required to convert the CCSID of the pattern and the string value into the CCSID returned by nl_langinfo(CODESET) before passing them to regcomp() and regexec().
Although that does not fix the "\s" problem, it might be helpful to know for people using regular expressions on the IBM i.
Thomas.
-----Ursprüngliche Nachricht-----
Von: RPG400-L [mailto:rpg400-l-bounces@xxxxxxxxxxxxxxxxxx] Im Auftrag von Tools/400
Gesendet: Sonntag, 3. November 2019 17:11
An: rpg400-l@xxxxxxxxxxxxxxxxxx
Betreff: Regular expression (regcomp()) ccsid issue
Hi,
Hopefully somebody is smarter than me. The iSphere source member search
(using regular expressions) does not work when using character classes,
such as "\s".
Whatever I try, I cannot make it work.
I tried to convert the pattern and the value to ccsid 37 without success.
I tried retrieving the current ccsid with nl_langinfo(CODESET) and
convert the pattern and value to that ccsid without success.
Last but not least setting the locale with setLocale(LC_ALL:
LC_C_GERMANY) did not help.
Actually I wanted to change the source file search to use SQL function
REGEXP_COUNT. But that one is sooooo sloooow, that nobody wants to use
it. But at least it works.
REGEXP_COUNT takes 1644298 milliseconds when regexec() does the same job
in 8118 milliseconds. That is 200 times faster than SQL!!!
It was incredible if somebody could help me wit that. A working example
running on jobs with ccsid 37 and 273 would be great.
Regards,
Thomas.
As an Amazon Associate we earn from qualifying purchases.
This mailing list archive is Copyright 1997-2024 by midrange.com and David Gibbs as a compilation work. Use of the archive is restricted to research of a business or technical nature. Any other uses are prohibited. Full details are available on our policy page. If you have questions about this, please contact
[javascript protected email address].
Operating expenses for this site are earned using the Amazon Associate program and Google Adsense.