[NEWSboard IBMi Forum]
Seite 3 von 4 Erste ... 2 3 4 Letzte
  1. #25
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Dann les dazu mal die Beschreibung:

    The RTNPARM keyword specifies that the return value of a procedure is to be handled internally as a
    parameter of the same type as the defined returned value, passed by reference.

    Da der zusätzliche Parameter unbenannt ist, lässt er sich also nicht direkt ansprechen.
    Die Wirkung entfaltet sich erst, wenn man ein Ergebns im Return spezifiziert, da dieses dann nicht in einer Zwischenvariablen sondern direkt übergeben wird.

    Es bringt aber keinen Vorteil, wenn man sowieso eine benannte Variable benötigt die dann beim Return den Wert doch wieder kopieren muss.
    Ansonsten: laut Doku bringt es besonders bei großen Returnwerten etwas, da der automatische Speicher dadurch nicht belastet wird.

    Zu beachten sind aber besonders die Hinweise bzgl. %PARMS und %PARMNUM, da diese Funktionen den Wert um 1 größer melden.
    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. #26
    Registriert seit
    Mar 2002
    Beiträge
    5.286
    ... das ist wieder so eine typische RPG-Denke. Das sind auf heutigen Rechnern nicht mal Mikrosekunden, die man da vermeintlich einspart und den eigentlichen Pferdefuß übersieht man: die RTNPARM Arie verhindert caching, was in vielen Fällen mehr bringt. Was Speicher sparen angeht: das verträgt sich nicht mit der zunehmenden Verfettung der RPG Runtime durch Gimmicks wie dynamische Feldgruppen (hier sei am Rande erwähnt, dass es schon seit langem Open Source Komponenten gibt, die das besser können).

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

  3. #27
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Zitat Zitat von B.Hauser Beitrag anzeigen
    Du kannst auch mit SQL gezielt auf Daten zugreifen und dir nur das rausholen, was Du brauchst.
    File-Referenz-Variablen kannst Du mit SQL-Funktionen genau wie alphanumerische Felder behandeln, d.h. mit POSSTR oder LOCATE kannst Du positionieren und suchen, mit SUBSTR kannst Du Daten gezielt herauslesen und dann in eine (kürzere) Host-Variable ausgeben.
    ... und Du bist auch nicht auf 16MB beschränkt, sondern kannst die ganzen (möglichen) 2GB verarbeiten. (Die Daten werden überigens nicht kopiert)

    Beispiel:
    Code:
     DCL-S MyClobFile  SQLTYPE(CLOBFILE) CCSID(1208);
    ...
     MyCLOBFile_Name = %Trim(ParIFSFile);                               
     MyCLOBFile_NL   = %Len(%Trim(MyCLOBFile_Name));                    
     MyCLOBFile_FO   = SQFRD;                            //Read Only    
                                                                        
     For Index =  1 to 15;                                              
         Start = (Index-1) * RowLen + 1;                                
         Exec SQL Set :MyText = Substr(:MyCLOBFile, :Start, :RowLen);   
         Dsply MyText;                                                  
         If    SQLCODE = 100 or SQLCODE < *Zeros                        
            or %Len(%Trim(MyText)) = *Zeros;                            
            Leave;                                                      
         EndIf;                                                         
     EndFor;
    Birgitta

    Hinweis für alle, die sich für dieses Thema interessieren: Das Programmbeispiel von Birgitta ist fast korrekt. Der SQLTYPE muss allerdings mit Unterstrich getrennt werden: CLOB_FILE.

    Aber mit einer anderen Sache haben wir ganz schön gekämpft: Im obigen Beispiel greift man mit substr auf den Clob zu. Das funktioniert nicht korrekt, wenn es sich um Mixed Data Strings handelt ! Das ist bei UTF-8 der Fall, wo ja die einzelnen Zeichen durch unterschiedliche viele Bytes ausgedrückt werden. Substr akzeptiert zwar einen UTF-8 String, interpretiert die Positionsangaben aber als Byte, nicht als Zeichen!

    (Steht in der SQL Referenz "im Kleingedruckten").

    Die Lösung ist aber einfach: Es gibt zusätzlich die Funktion "substring" (also alles ausgeschrieben). Die Funktion kann mit echten Zeichenzählungen umgeben!

    Aber nochmals Danke an Birgitta für das Programmbeispiel. Hat uns sehr weitergeholfen!

    Dieter

  4. #28
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Noch ein Hinweis:
    Auch die SQL Funktion length kommt mit Mixed Byte Strings (wie UTF-8) nicht zurecht. Es gibt aber die Funktion character_length. Die zählt echte Zeichen und nicht etwa Bytes!

  5. #29
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Was hilft einem das für Substring?
    Bei der Angabe der CCSID zur CLOB_FILE könnte man mal versuchen die 1200 für UCS16 zu verwenden.
    Dann sollte beim Lesen der Datei von 1208 in 1200 gewandelt werden und Substring wieder funktionieren.
    Performant ist das nicht gerade. Einfacher wäre dann, die Datei in einen Lob-Locator vom Typ DBCLOB abzulegen. Dann kann man per Substring ja darauf zugreifen.
    Dann wird nur 1x auf die IFS-Datei zugegriffen, der Rest passiert im Speicher.
    Vergiss nicht, den Locator auch wieder frei zu geben.
    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. #30
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    substring funktioniert ja mit utf-8. Nur substr geht nicht! Ich wollte nur darauf hinweisen, dass es inzwischen einige SQL Funktionen gibt, die auf den ersten Blick genau das machen, was die alten Funktionen (substr, length) auch gemacht haben. Aber die neuen Funktionen (substring, character_length) funktionieren eben auch bei UTF-8 korrekt, während die alten Funktionen falsche Ergebnisse liefern.

    Zu dem Freigeben muss ich aber nochmal nachfragen: Ich mache den Zugriff ja wie im obigen Beispiel beschrieben:
    DCL-S MyClobFile SQLTYPE(CLOBFILE) CCSID(1208);
    ...
    MyCLOBFile_Name = %Trim(ParIFSFile);
    MyCLOBFile_NL = %Len(%Trim(MyCLOBFile_Name));
    MyCLOBFile_FO = SQFRD;

    Dann arbeite ich auf dem Clob mit den SQL-Funktionen substring und character_length. Muss ich danach nochmal irgendetwas freigeben?

  7. #31
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Freigabe brauchst du da nicht, da du ja keinen Locator nimmst.
    Dein Verfahren liest die Datei komplett ein, nimmt den Substring und verwirft den Inhalt wieder.
    Je nach dem wie häufig du da auf eine Datei zugreifst, dauert das halt.
    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. #32
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Danke für die Antwort. So hatte ich es mir beim Programmieren auch vorgestellt. Gefühlt geht das ganze rasend schnell. Ich habe aber keine Messungen durchgeführt.

  9. #33
    Registriert seit
    Feb 2021
    Beiträge
    10
    Hallo Brigitta,

    dein Beispiel oben läuft bei mir rudimentär.
    Ich möchte eine IFS-CSV-Datei lesen, und zwar Satzweise,
    bis EOF.
    Was muss ich noch beachten ?
    Danke im voraus.

  10. #34
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Ich habe dir auf den anderen Beitrag geantwortet. Warum immer alles neu erfinden?
    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

  11. #35
    Registriert seit
    Feb 2021
    Beiträge
    10
    Danke für eure Hilfe, habe nun die Lösung per SQL gefunden: Super gut

    SELECT CAST(LINE AS CHAR(3000))
    FROM TABLE(QSYS2.IFS_READ(PATH_NAME =>
    '/IMTECH/SELKUKEY3.CSV', END_OF_LINE => 'CRLF'))

    ACS kann es ohne CAST

  12. #36
    Registriert seit
    Feb 2001
    Beiträge
    20.206
    Ich verstehe aber immer noch nicht, warum du eine CSV selber lesen und ggf. auseinanderfriemeln und konvertieren willst.
    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

Similar Threads

  1. http_url_get mit unicode
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 29-03-19, 14:56
  2. Zeichenumsetzung AS/400 nach Streamfile
    By Theo in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 02-03-18, 13:46
  3. Ausländische Zeichen in Streamfile schreiben
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 7
    Letzter Beitrag: 12-12-17, 14:32
  4. Konvertieren in Unicode
    By Rainer Ross in forum NEWSboard Programmierung
    Antworten: 5
    Letzter Beitrag: 28-10-16, 17:16
  5. IFS-Streamfile in RPG bearbeiten
    By Bleil in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 13-10-01, 21:15

Berechtigungen

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