[NEWSboard IBMi Forum]
Seite 1 von 2 1 2 Letzte
  1. #1
    Registriert seit
    Aug 2013
    Beiträge
    23

    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

  2. #2
    Registriert seit
    Dec 2004
    Beiträge
    203
    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

  3. #3
    Registriert seit
    Nov 2004
    Beiträge
    325
    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

  4. #4
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Wie rufst du das Programm derzeit auf?

    Probiers mal mit: ... = %TRIM(ADRESSEN)

  5. #5
    Registriert seit
    Aug 2001
    Beiträge
    2.873
    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.
    Birgitta Hauser

    Anwendungsmodernisierung, Beratung, Schulungen, Programmierung im Bereich RPG, SQL und Datenbank
    IBM Champion seit 2020 - 4. Jahr in Folge
    Birgitta Hauser - Modernization - Education - Consulting on IBM i

  6. #6
    Registriert seit
    Aug 2013
    Beiträge
    23
    Zitat Zitat von TheDevil Beitrag anzeigen
    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

  7. #7
    Registriert seit
    Dec 2004
    Beiträge
    203
    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

  8. #8
    Registriert seit
    Nov 2004
    Beiträge
    325
    Moin,

    mach doch mal das kleine Testprogramm, das funzt so.

    mfg

    DKSPROFI

  9. #9
    Registriert seit
    Aug 2013
    Beiträge
    23
    Zitat Zitat von DKSPROFI Beitrag anzeigen
    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

  10. #10
    Registriert seit
    Jun 2001
    Beiträge
    1.975
    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 ?
    Das Notwendige steht über dem technisch machbaren.
    (klingt komisch, funktioniert aber!)

  11. #11
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Wie rufst du das Programm derzeit auf?

    Zitat Zitat von Robi Beitrag anzeigen
    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 ?

  12. #12
    Registriert seit
    Aug 2013
    Beiträge
    23
    Zitat Zitat von Pikachu Beitrag anzeigen
    Wie rufst du das Programm derzeit auf?

    Probiers mal mit: ... = %TRIM(ADRESSEN)
    Moin,

    simpel über call PGM(Mail) PARM('test@test.de')

    hab's so schon probiert, kein Erfolg

    Gruß und Danke
    Rue

Similar Threads

  1. Inhalt eines Pointers ermitteln mit SQL
    By jlindner in forum NEWSboard Programmierung
    Antworten: 18
    Letzter Beitrag: 30-12-16, 15:55
  2. Aufruf einer SQL Stored Procedure in SQLRPGLE
    By Witaseck in forum NEWSboard Programmierung
    Antworten: 20
    Letzter Beitrag: 14-12-16, 17:23
  3. SQL0312 bei Umwandlung von SQLRPGLE mit Variablen
    By msost in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 02-03-16, 17:39
  4. Ermitteln von Einträgen einer DSTQ
    By dago in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 12-07-02, 10:15
  5. Antworten: 10
    Letzter Beitrag: 23-01-02, 14:02

Tags for this Thread

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • You may not post attachments
  • You may not edit your posts
  •