View Full Version : SQLRPGLE Länge vom Inhalt einer Variablen ermitteln
Moin Moin,
ich stehe vor einem Problem.
Mein Wünsch ist es, an ein SQLRPGLE Programm einen String von 2000 Zeichen (E-Mail-Adressen) als Parameter zu übergeben. Diese brösele ich im Programm auseinander.
Was Ich aber brauche, ist die Länge des Inhaltes des übergebenen Strings.
Bsp.: String = test@test.de -> Ergebnis = 12
String = test@test.de, dump@dump.de -> Ergebnis = 26
Bisher wird mir als Ergebnis immer 2000 ausgegeben, was auch der Deklaration entspricht.
Programm Source:
D ENDE_POS S 4b 0
D char_varying S 2000a Varying
D ADRESSEN S 2000
*ENTRY PLIST
PARM ADRESSEN
C eval char_varying = ADRESSEN
/free
ENDE_POS = %len(%trim(char_varying));
/end-free
Hab schon endlich Zeit gegoogelt, aber leider nichts passendes gefunden.
Vorab, vielen Dank!
Gruß
Rue
Hallo.
Hmmm ... kenn mich jetzt nicht so mit VARYING aus aber vielleicht liegt es ja daran. Da deine
Empfangsvariable (ADRESSEN) ja auch auf 2000 Zeichen beschränkt ist nehm doch mal diese
und mach ein ende_pos = %len(%trim(ADRESSEN)) ... einen Versuch ist es Wert oder ?
Gruß,
Ralf
Moin,
so funzt das.
d Field S 2000A Varying
d String S 2000A Inz('Ergebnis des Inhaltes ist 28')
d FieldLen S 5S 0 Inz
Field = String ;
FieldLen = %Len(%Trim(Field)) ;
Dsply FieldLen ;
mfg
DKSPROFI
Wie rufst du das Programm derzeit auf?
Probiers mal mit: ... = %TRIM(ADRESSEN)
Wenn Du ein Feld mit Fixer Länge (ADRESSEN) in ein Feld mit Variabler Länge schiebst, werden die folgenden Blanks immer mit übernommen.
Du musst also die Blanks von dem Feld ADRESSEN explizit mit %TRIM oder %TRIMR entfernen.
Allerdings sollte bei %Len(%Trim()) das richtige Ergebnis heraus kommen. Wahrscheinlich steht auf der letzten Stelle noch irgendein Sonderwert (z.B. x'00').
Anstatt 4B 0 solltest Du Int(5) oder Uns(5) verwenden.
Wenn Du Protoypting verwenden würdest, könntest Du mit OPTIONS(*TRIM) führende und folgende Blanks bei der Übergabe automatisch entfernen lassen.
Birgitta.
Hallo.
Hmmm ... kenn mich jetzt nicht so mit VARYING aus aber vielleicht liegt es ja daran. Da deine
Empfangsvariable (ADRESSEN) ja auch auf 2000 Zeichen beschränkt ist nehm doch mal diese
und mach ein ende_pos = %len(%trim(ADRESSEN)) ... einen Versuch ist es Wert oder ?
Gruß,
Ralf
Hallo,
danke für den Tipp aber leider keine Veränderung :(
Gruß
Rue
Hallo.
Wie Brigitta schon schrieb. Evtl. steht noch ein Wert ungleich "Leerzeichen" in Stelle 2000.
Mach doch mal eine Abfrage mit Substring auf die letzte Stelle.
If letzte Stelle mit Substring <> "" dann blablablabla ... und dann rein mit dem Debugger ...
Gruß,
Ralf
Moin,
mach doch mal das kleine Testprogramm, das funzt so.
mfg
DKSPROFI
Moin,
so funzt das.
d Field S 2000A Varying
d String S 2000A Inz('Ergebnis des Inhaltes ist 28')
d FieldLen S 5S 0 Inz
Field = String ;
FieldLen = %Len(%Trim(Field)) ;
Dsply FieldLen ;
mfg
DKSPROFI
Moin,
mit dem festen Wert klappt es wunderbar.
Nur leider nicht wenn ich dies als Parameter mitgeben will.
Besten Dank
MfG
Rue
Gibt das rufende PGM den 2000 byte weg?
oder weniger?
Ab 32 Byte muß die Länge stimmen, sonnst füllt das BS den Wert mit 'irgendetwas'.
Was zeigt der debug, als hex ?