[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2005
    Beiträge
    393

    RPGLE --> CLLE String wird mit x'00 statt x'40' gefüllt

    Moin
    wir haben hier ein ILERPG Pgm, das ein CLLE ruft.

    Es werden 9 Parameter, alle *CHAR übergeben.
    Parameter 1 - 8 kommt 'richtig', wenn leer dann mit x'40' gefüllt.
    Diese sind < 32 Byte.
    Der 9. Parameter ist 275 Byte groß, wird im RPG mit *blank initialisiert.
    Danach wird er aus einer Datei gefüllt. I.d.R. weniger als 275 Stellen.

    Die Füllung erfolgt in einer Schleife, ab dem 2. lesen so:
    eval Text = %substr(text:1:i*30) + NUTEXT

    Im CLLE kommt der String mit 'seinen' Daten + x'00' an.
    Auch ein XLATE x'00' auf x'40' im RPGLE hilft nicht.

    Das war früher nicht so oder? (Jetzt V7R5)
    Kann ich das beeinflusen?

    Danke.
    der ILEMax

  2. #2
    Registriert seit
    Jan 2012
    Beiträge
    1.120
    Moin,
    sind die Parameter im RPGLE eventuell nicht char definiert sondern varchar?

    Oder wird das CL nicht einfach mit CALL aufgerufen, sondern per SBMJOB?

  3. #3
    Registriert seit
    Sep 2005
    Beiträge
    393
    Nachtrag:
    Das ist nur im Batch so.
    Das clle prüft ob es interaktiv oder im Batch läuft.
    Läuft es interaktiv und wir haben keinen Debug an, submittet es sich selbst.

  4. #4
    Registriert seit
    Sep 2005
    Beiträge
    393
    Noch ein Nachtrag..
    Habe im Submit(call Pgm Parm(
    nun beim letzten Parameter *char 275 mit angegeben.
    Jetzt geht es wieder.
    Der ILEMax

  5. #5
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Das ist dann der Fall, wenn du den Umweg über QCMDEXC, also z.B. für SBMJOB machst.
    Es galt schon immer beim CMD-Call:

    Wenn Zeichen kürzer als 32 angegeben werden, werden sie mit Leerzeichen aufgefüllt, bei längeren Zeichenfolge nur in der angegebenen Länge.
    Für die korrekte Länge muss die ganze Zeichenkette komplett mit Leerzeichen aufgefüllt in Hochkommas übergeben werden, incl. ggf. zu verdoppelnder eingebetteter Hochkommas.

    Man kann natürlich auch einfach 1 Zeichen mehr übergeben, als das Ziel erwartet. Im Ziel ist das dann nicht zu sehen.
    Also beim ILERPG:
    dcl-s feld char(275);

    call qcmdexc 'SBMJOB .... CALL PGMX PARM(''' + feld + 'x' + ''')

    im CLLE/CLP:

    dcl &feld char(275)
    var &parm char(276)
    chgvar &parm (&feld *cat 'x')
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  6. #6
    Registriert seit
    Sep 2005
    Beiträge
    393
    Also in der Form war das früher nicht!
    Das 32 Bit Thema ist bekannt.
    Der String wird in 2 ' übergeben (vorne und hinten je 2!)

    Das Pgm läuft selten aber schon seit mehreren Jahren.
    irgendwas ist anders
    Aber egal, mit dem *CHAR 275) geht es wieder

    Der ILEMax

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    %substr(text:1:i*30) + NUTEXT

    Wenn das Ergebnis des Substr kürzer als 275 ist, steht dein NUTEXT nun mal direkt dahinter.
    Ich wüsste nun nicht, was sich da dann geändert haben sollte.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  8. #8
    Registriert seit
    Sep 2005
    Beiträge
    393
    ???
    Nutext ist 30 stellig

    1. lesen: i = 0, eval text = nutext
    2. lesen bis eof: i = i + 1, eval text = substr(text:1:i*30) + Nutext

    so bilden sich Inhalte die zwischen 1 und 275 Byte lang sind
    Ja, 275 ist nicht durch 30 Teilbar, macht aber nix!

    Diese werden immer in '' in dem 275 er Text String weggegeben
    Im CLLE kommt das auch an
    beim Submit des CLLE von sich selber wird aus
    ABCX'40'x'40'x'40'...
    ABCX'00'x'00'x'00'...
    Das war nicht so, das Pgm läuft seit Jahren. Selten aber 1-4 mal / Jahr.
    Gestern hat es geknallt.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Aber wie sieht denn der SBMJOB denn tatsächlich aus. Irgendwo müssen die Hochkomma dann wieder weg interpretiert werden, was zum Abschneiden auf die Länge der Konstanten führt.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  10. #10
    Registriert seit
    Sep 2005
    Beiträge
    393
    sbmjob(call pgm(Pgmx) parm('123') ('234') ('9') ('240412') (''ABC '') (''D e f'') ('123457') ('7') (''test text test text test3 text ... mit leerzeichen am ende''))) Job(xyzjob) Jobd(meinejobd)

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.241
    Der lange Text hat jeweils 2 Hochkommata statt 1 oder 3, ggf. ist das ja die Ursache da das eigentlich ein Syntaxfehler ist.
    Korrigiere das mal auf 1 Hochkomma.
    Dienstleistungen? Die gibt es hier: http://www.fuerchau.de
    Das Excel-AddIn: https://www.ftsolutions.de/index.php/downloads
    BI? Da war doch noch was: http://www.ftsolutions.de

  12. #12
    Registriert seit
    Nov 2003
    Beiträge
    2.307
    Vielleicht wurde durch das hier etwas verändert?

    In IBM i 7.5 wurden CALL und CALLPRC beim Parameter PARM() erweitert...

Similar Threads

  1. XML SQL - Tag nur zeigen wenn gefüllt
    By dholtmann in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 23-03-16, 12:33
  2. Antworten: 5
    Letzter Beitrag: 12-03-15, 12:20
  3. Dateifelder sind nach erfolgreichem CHAIN nicht gefüllt
    By harkne in forum NEWSboard Programmierung
    Antworten: 6
    Letzter Beitrag: 19-11-13, 10:02
  4. Antworten: 4
    Letzter Beitrag: 23-02-06, 16:01
  5. statt ß wird á gedruckt
    By ThomasR in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 08-03-05, 11:54

Berechtigungen

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