[NEWSboard IBMi Forum]

Hybrid View

  1. #1
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Falsch!
    Wenn du das externe Programm immer nur aus ILERPG mittels Prototyp aufrufst, legt der Compiler eben eine entsprechend große Kopie an, es gibt dann keinen Müll.
    Durch "varying" wird eine 2-byte-Längeninformation vorangestellt, die du einfach mit %len() abfragen kannst.
    %len() liefert die Länge des Inhaltes bei varying (bzw. DDS-varlen) Feldern, %size() die tatsächliche definierte Größe.
    Bei fixed Variablen liefert %len() und %size() die selbe Information.

    Beim Aufruf von CLP definierst du eben eine 1002-Byte-Variable und stellst die Länge per %bin(&Ziel 1 2) voran.
    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

  2. #2
    Registriert seit
    Feb 2006
    Beiträge
    78
    Ah, OK Danke!

    Wieder etwas gelernt ;-)

    Werde ich ausprobieren.

    Danke!!

  3. #3
    Registriert seit
    Jan 2001
    Beiträge
    850
    Zitat Zitat von XMan Beitrag anzeigen
    Ah, OK Danke!

    Wieder etwas gelernt ;-)

    Werde ich ausprobieren.

    Danke!!
    Hi,

    zum Beispiel kann man so die Länge feststellen:
    PHP-Code:
    /free                                           
        values 
    = %char(%len(%size(In_Group))) ; 
                                                    
    /
    end-free 
    Gruss
    Michael

  4. #4
    Registriert seit
    Jan 2001
    Beiträge
    850
    Zitat Zitat von XMan Beitrag anzeigen
    Ah, OK Danke!

    Wieder etwas gelernt ;-)

    Werde ich ausprobieren.

    Danke!!
    Hi,

    zum Beispiel kann man so die Länge feststellen:
    PHP-Code:
    /free                                           
        values 
    = %char(%len(%size(In_Group))) ; 
                                                    
    /
    end-free 
    Wobei
    %len die Feldgröße 1000 angibt
    %size die tatsächliche Länge des Inhalts
    Gruss
    Michael

  5. #5
    Registriert seit
    Nov 2012
    Beiträge
    51

    Thumbs down

    mk, mal davon abgesehen, dass die Antwort eine relative Themenverfehlung ist, was tut denn Dein Code Deiner Meinung nach genau und wann sollte man das brauchen können???

    Denn wenn "In_Group" 1000 Bytes lang ist, und es steht zum Beispiel "Ich sollte den Dingen die Zeit schenken, die sie verdienen." in dieser Variable, liefert Dein Code das Ergebnis "4".

  6. #6
    Registriert seit
    Jan 2001
    Beiträge
    850
    Hi,

    sorry, ich schäme mich.

    Hatte das einfach so runtergetippt.

    Um die Länge eines Feldes festzustellen kann man aber folgendes
    verwenden.
    PHP-Code:
    values = %char(%len(%trimIn_Group))) 
    Gruß
    Michael

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Wofür dann noch die Umwandlung in CHAR ?

    Zu beachten ist, dass %trim() auch Leerzeichen am Anfang entfernt!
    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
    Feb 2006
    Beiträge
    78
    Mal davon abgesehen das die Leerzeichen weg sind hilft das ja auch nicht weiter. Denn wenn der übergebene Parameter 1000 Zeichen hat aber vom aufrufenden Pgm nur 100 bekommt, so steht auch dieser "Datenmüll" drinnen.
    Somit ist auch die Länge ein falsches (%len(%trim(...))) Ergebnis.
    Mein Problem ist ja das ich dieses Pgm aus verschiedensten Anwendungen (CL, RPGIII, RPG ILE, ...) aufrufen können muss.
    Da ich mir das Leben aber selber nicht schwerer machen wollte, habe ich nun einen zusätzlichen Parameter mitgegeben der mir die Länge des Text-Parameters mit gibt. Somit kann ich dann richtig reagieren.

    Dennoch Danke ich Euch für die Anregungen!

    LG und schönen Abend!

  9. #9
    Registriert seit
    Mar 2002
    Beiträge
    5.368
    ... das ist kein Datenmüll, das ist Speicherbereich aus dem aufrufenden Programm - wenn der verändert wird geht im Call Stack oberhalb des Aufrufers der Punk ab!!!

    D*B
    , Kopf schüttelnd
    AS400 Freeware
    http://www.bender-dv.de
    Mit embedded SQL in RPG auf Datenbanken von ADABAS bis XBASE zugreifen
    http://sourceforge.net/projects/appserver4rpg/

  10. #10
    Registriert seit
    Feb 2006
    Beiträge
    78
    @BenderD

    das ist mir bewusst das dieser "Müll" benötigt wird!
    Siehe 2. Posting von mir "...der Rest des Parameters nur "Müll" enthält (wobei der Müll ja vom System benötigt wird)..."

    Ich bezeichne in deshalb als "Müll" (auch bewusst unter Anführungszeichen geschrieben) weil ich im Pgm damit nichts anfangen kann wenn das im Parameter steht!


    LG

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.704
    Dies deutet wie immer darauf hin, dass Aufrufkonventionen nicht eingehalten wurden.
    Dies wird ja auch (in vereinfachter Form) durch die Prototyp- und Interfacedefinitionen (leider nur zur Compile-Zeit) einigermaßen geprüft.
    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 2012
    Beiträge
    51

    "Aufrufkonventionen" treffen hier aber nicht wirklich zu.

    XMan will hier den ersten Parameter übergeben, wie er möchte (was kein Problem ist) UND er möchte herausfinden, wie groß die Variable im aufrufenden Programm ist (das ist das Problem). Wozu auch immer er das brauchen mag, das wissen wir leider nicht.

    Und er hat das Problem auf genau die gleiche Weise wie die IBM selber bei z.B. QCMDEXC gelöst.

    "Schöner" wäre natürlich irgendeine einfache Funktion in RPG selber, die einem die Infos liefert. Aber die gibt's halt leider (noch) nicht.

Similar Threads

  1. Fehler CEE0502 bei der Ausführung des API CEEDOD
    By HeymannJ in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 09-11-12, 11:39

Berechtigungen

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