-
... hast du mal die Umgebungsvariablen verglichen?
D*B
 Zitat von chrisssiie
ich habe schon beides probiert....
einmal das Objekt rübergeschickt und einmal die Quelle und dann probiert...
aber es verhält sich nicht genauso wie auf unserer Maschine....
auf der einen Maschine funktioniert es nur, wenn ich iconv in CCSID 37 wandel und auf unserer nur wenn ich das ohne iconv mache....
hat es evtl doch etwas mit den C Routine(regexec, regcomp..) zu tun??
Die SRC-PF´s haben beide die selben CCSID´s: 273
LANGID: DEU
Hier mal ein Teil des Codes mit dem ich es probiere:
Code:
C EVAL scPattern = '^[A-Z0-9._%-]+@[A-Z0-9.-]+\.+
C [A-Z]{2,4}$'
C*
C*
C EVAL PatternBuf = scPattern
c eval PatternLen = %len(%trimr(scPattern))
c eval p_PatternBuf = %addr(PatternBuf)
C* Hier evtl Konvertierung in CCSID 37
c** if iconv(ic: p_PatternBuf: PatternLen:
c** p_PatternBuf: PatternLen) = -1
c** callp fatal_error
c** endif
c eval PatternLen = %len(%trimr(scPattern))
c eval rc = regcomp(reg:
c %subst(PatternBuf:1:PatternLen):
c REG_EXTENDED+REG_ICASE+REG_NOSUB)
C RC DSPLY
c if rc <> 0
c callp regerror(rc: reg:
c %addr(buf): %size(buf))
c eval scMsg = %str(%addr(buf))
c endif
C
c eval scSflLine = 'test@test.de'
C EVAL PatternBuf = scSflLine
c eval p_PatternBuf = %addr(PatternBuf)
C* Hier evtl Konvertierung in CCSID 37
c*** if iconv(ic: p_PatternBuf: PatternLen:
c*** p_PatternBuf: PatternLen) = -1
c*** callp fatal_error
c*** endif
c eval PatternLen = %len(%trimr(scSflLine))
c eval rc = regexec(reg:
c %subst(PatternBuf:1:PatternLen):
c 0: match: 0 )
C RC DSPLY
c endif
c*
Csr *INZSR begsr
*-----------------------
c eval ic = QtqIconvOpen(to: from)
c if ic.return_value = -1
c callp fatal_error
c endif
*-----------------------
Csr endsr
-
jap es war die Umgebungsvariable....
Bei uns war die auf
LANG='QSYS.LIB/DE_DE.LOCALE
gesetzt....
auf der anderen Maschine war diese leer....
Mit
ADDENVVAR ENVVAR(LANG) VALUE('QSYS.LIB/DE_DE.LOCALE')
ham sich dann beide gleich verhalten....
Aber so ist es mir dann schon klar... die Zeichen waren alle in deutscher CCSID codiert und dann hat er sich in den C Routinen irgend eine andere gezogen.... aber welche nimmt er dann, wenn die Umgebungsvariable LANG nicht gesetzt ist?
wie steuert man das dann am besten, wenn man das Programm auf verschiedenen Maschinen laufen lassen will??
überall die Umgebungsvariable setzen??
-
... da gibt es mehrere Ebenen
- Maschinenweit
- User bezogen (geht normal über ein property File im User Home)
- Job bezogen (muss dann im SBMJOB, oder beim init, oder vor dem Programm eingestellt werden
D*B
 Zitat von chrisssiie
 jap es war die Umgebungsvariable....
Bei uns war die auf
LANG='QSYS.LIB/DE_DE.LOCALE
gesetzt....
auf der anderen Maschine war diese leer....
Mit
ADDENVVAR ENVVAR(LANG) VALUE('QSYS.LIB/DE_DE.LOCALE')
ham sich dann beide gleich verhalten....
Aber so ist es mir dann schon klar... die Zeichen waren alle in deutscher CCSID codiert und dann hat er sich in den C Routinen irgend eine andere gezogen.... aber welche nimmt er dann, wenn die Umgebungsvariable LANG nicht gesetzt ist?
wie steuert man das dann am besten, wenn man das Programm auf verschiedenen Maschinen laufen lassen will??
überall die Umgebungsvariable setzen??
-
welche Auswirkungen hat es denn, wenn man das Systemweit macht?
Also kann man dann mit irgendetwas Probleme kriegen?
-
... das kann Bob Dylan beantworten: the answer my friend, is blowing in the wind...
Sicherlich keine gute Idee, am defensivsten ist es, das innerhalb des Programmes zu regeln
D*B
 Zitat von chrisssiie
welche Auswirkungen hat es denn, wenn man das Systemweit macht?
Also kann man dann mit irgendetwas Probleme kriegen?
-
lol, na dann frag ich mal bob dylan 
Im Programm kann ichs doch dann aber nur so regeln, dass ich vor jeder REGEX Prüfung einen ADDENVVAR auf Jobebene mach und danach einen RMVENVVAR...
oder gibts da bessere Methoden?
-
Stimmt, allerdings würde ich die CCSID des Jobs abfragen und die dazu passende Lokale wählen (falls es tatsächlich mal nicht 273 DE ist).
-
ok, das hat mir mal wieder sehr geholfen 
Dankeschön ihr beiden
-
Alternativ gibts noch die C-Funktion setlocale().
Vielleicht kommst du ja damit weiter und benötigst dann keine ENVVAR mehr.
Wenn setlocale() nicht funktioniert, kannst du auch mit putenv() die Variable setzen.
Vorteil bei putenv():
- gilt nur für das aktive Prgrammobjekt
- keine ENVVAR's im Job
-
hmm.....
ich hab das jetzt mal mit putenv probiert....
Code:
D putenv PR 10i 0 ExtProc('putenv')
D envvar * VALUE OPTIONS(*STRING:*TRIM)
D cp s 1024a
// set LANG
cp = %trim(var) + '=' + %trim(value);
if (putenv(cp) < 0);
err = errno;
endif;
Er scheint auch was zu machen, weil wenn ich mit STRQSH echo $LANG die Variable anschaue, zeigt er mit das richtig an.... aber die Regex-Funktionen gehen irgendwie nicht richtig....
mach ich vorher einen ADDENVVAR ENVVAR(LANG) VALUE('/QSYS.LIB/DE_DE.LOCALE') REPLACE(*YES)
klappt alles.....
-
Hallo,
ich hole das Thema noch einmal hoch, da ich es damals nicht hingebracht habe vernünftig zum laufen zu kriegen....
Ich habe jetzt noch einmal etwas rumprobiert und habe folgendes herausgefunden:
Die Regex-Befehle arbeiten mit der CCSID von der Umgebungsvariable LANG....
LANG ist meistens mit dem Wert aus dem Systemwert QLOCALE festgelegt...
Kann man im USerprofile angeben(Wert LOCALE)...
Steht in der Umgebungsvariable nichts drin(wegen QLOCALE = *NONE), dann arbeiten die Regex Routinen mit CCSID 37...
d.h. für mich, wenn ich meinen Regex in einer Source, welche in CCSID 273 gespeichert ist habe, muss ich diesen in die CCSID, welche der aktuellen Umgebungsvariable LANG entspricht umwandeln...
In der Umgebungsvariable LANG steht aber z.B. /QSYS.LIB/DE_DE.LOCALE....
Wie bekommt man jetzt raus, welche CCSID dem Objekt /QSYS.LIB/DE_DE.LOCALE entspricht, ohne die hart im Programm umzuschlüsseln??
Oder gibt es eine Umgebungsvariable, welche mir die CCSID zurückgibt, welche der Umgebungsvariable LANG entspricht??
Gruß
chrisssiie
Similar Threads
-
By codierknecht in forum NEWSboard SAP
Antworten: 32
Letzter Beitrag: 09-02-18, 13:00
-
By umeis in forum NEWSboard Windows
Antworten: 3
Letzter Beitrag: 11-08-06, 12:45
-
By schaaf in forum IBM i Hauptforum
Antworten: 3
Letzter Beitrag: 04-05-06, 11:18
-
By Muchi in forum IBM i Hauptforum
Antworten: 7
Letzter Beitrag: 21-04-06, 13:54
-
By Binford in forum IBM i Hauptforum
Antworten: 6
Letzter Beitrag: 07-03-06, 08:58
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks