[NEWSboard IBMi Forum]
Seite 1 von 4 1 2 ... Letzte
  1. #1
    Registriert seit
    Sep 2018
    Beiträge
    94

    Aus ILE Programm direkt in IFS schreiben

    Hallo,

    ich möchte gerne direkt aus einem ILE-RPG Programm heraus im IFS eine Textdatei (xxx.txt) anlegen und befüllen. Diese Datei soll dann in einem Fremdsystem weiter verarbeitet werden.

    Klar kann ich zunächst in eine physische Datei schreiben und diese dann mit CPYTOIMPF übertragen. Aber direkt diese Datei öffnen und befüllen...

  2. #2
    Registriert seit
    Jan 2003
    Beiträge
    746

  3. #3
    Registriert seit
    Jan 2001
    Beiträge
    832
    Hi,

    einfach ein CLOB File mit SQL schreiben.
    Das ist einfacher als die unix api's zu verwenden

    Ungefähr so
    dcl-s aHtmlMailFile sqltype(clob_file) ; //
    ...
    clob variable füllen
    ...

    clob als IFS Datei anlegen
    exec sql values(:clob) into : aHtmlMailFile ; //CLOB als IFS Datei schreiben

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Dabei ist allerdings die Angabe einer CCSID beim CLOB_FILE erforderlich, sonst wird EBCDIC ausgegeben.
    Bei Job-CCSID 65535 gibt es allerdings eine Fehlermeldung beim Konvertieren.

    dcl-s aHtmlMailFile sqltype(clob_file) CCSID(1208); //
    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

  5. #5
    Registriert seit
    Jan 2001
    Beiträge
    832
    Sorry,

    Hi,

    einfach ein CLOB File mit SQL schreiben.
    Das ist einfacher als die unix api's zu verwenden
    Hier noch die Definition der CLOB Varaiblen:

    dcl-s clob sqltype(CLOB:50000) ccsid(*utf8) ; // Hier muss die CCSID angegeben werden


    Ungefähr so
    dcl-s aHtmlMailFile sqltype(clob_file) ; //
    ...
    clob variable füllen
    ...

    clob als IFS Datei anlegen
    exec sql values(:clob) into : aHtmlMailFile ; //CLOB als IFS Datei schreiben

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    Das ist ein Schritt zuviel!

    In dem folgenden Beispiel werden 3 Texte (nacheinander) direkt in eine IFS-Datei geschrieben.
    Der Trick ist, dass die File Operation LocClobFile_FO richtig gesetzt wird.
    SQFOVR generiert eine neue IFS-Datei oder überschreibt eine vorhandene IFS-Datei
    SQLFAPP generiert eine neue IFS-Datei, sofern nicht vorhanden. Sofern die IFS-Datei vorhanden ist, werden die Daten ans Ende der IFS-Datei angefügt.

    Code:
       DCL-S LocClobFile SQLTYPE(Clob_File) CCSID(1208);                                      
       DCL-S LocText     Char(50);                                                
       DCL-S LocIndex    Uns(3);                                                  
     //---------------------------------------------------------------------------
                                                                                  
       Clear LocClobFile;                                                         
                                                                                  
       LocClobFile_Name = '/home/Dir1/Dir2/YourIFSFile.txt';                                      
       LocClobFile_NL   = %Len(%Trim(LocClobFile_Name));                          
       LocClobFile_FO   = SQFOVR;       //Create/Override existing IFS File       
                                                                                  
       For LocIndex = 1 to 3;                                                     
           Select;                                                                
           When LocIndex = 1;                                                     
                LocText  = 'The important thing is not to stop questionning';     
           When LocIndex = 2;                                                     
                LocText  = 'Curiosity has its own reason for existence';          
           When LocIndex = 3;                                                     
                LocText  = 'Quote: Albert Einstein';                              
           EndSl;                                                                 
                                                                                  
           Exec SQL Set :LocClobFile = :LocText;                                  
           LocClobFile_FO   = SQFAPP;      //Add Data                             
       EndFor;
    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

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Welcher Schritt war da zuviel?
    Es wurden wie bei dir 2 Variablen (CLOB, CLOB_FILE) definiert und ein SQL ausgeführt.
    Wenn _FO nicht angegeben wird, nimmt SQL einen Default an.

    Was mich allerdings geärget hat ist, dass eine UCS2-Variable nicht direkt genommen werden kann (V7R3).
    Ich musste diese mit einem DBCLOB redefinieren (Overlay).
    Dann klappts auch mit UCS2 von/nach UTF8.
    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
    Aug 2001
    Beiträge
    2.869
    Ich habe KEINE CLOB-Variable nur eine CLOB-File!
    Zuerst in eine Variable und dann ins IFS ist ein Schritt zuviel.

    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

  9. #9
    Registriert seit
    Jan 2001
    Beiträge
    832
    Hi,

    ob nun eine Variable zuviel oder zuwenig ist wohl egal :-)

    Wichtig ist: Bei dem CLOB ignoriert das System die CCSID bei der DCL-S LocClobFile SQLTYPE(Clob_File) CCSID(1208); Definition.

    Die CCSID wird von der CLOB Variablen genommen. Deswegen die CLOB Variable mit UTF-8
    Gruß
    Michael

  10. #10
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    @Birgitta:
    "Zuerst in eine Variable und dann ins IFS ist ein Schritt zuviel."
    Und was ist das:
    Exec SQL Set :LocClobFile = :LocText

    Wir wollen ja schließlich keine Konstanten ausgeben.

    MK hat statt LocText eben eine variable "clob" verwendet.

    Und danke Michael, bzgl. der CCSID hast du Recht.
    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. #11
    Registriert seit
    May 2007
    Beiträge
    295
    Hallo. Wenn ihr das neueste TR drauf habts dann gibts da jetzt neue SQL-Funktion(en):

    https://www.rpgpgm.com/2020/11/writi...-with-sql.html

    Ich konnte es aber leider noch nicht selber testen/verwenden :-(

    LG
    Greets
    Christian
    Anwendungsentwickler und ein bissal Systemoperator
    https://github.com/prsbrc
    LinkedIn

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Nun ja, und noch eine Methode....;-).
    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. Programm aus QRPLOBJ wird dem echten Programm vorgezogen
    By dschroeder in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-01-17, 14:36
  2. Antworten: 15
    Letzter Beitrag: 05-01-16, 16:42
  3. PDFs aus dem IFS ausdrucken - direkt von der IBMi
    By JoergHamacher in forum NEWSboard Programmierung
    Antworten: 8
    Letzter Beitrag: 28-11-13, 10:56
  4. iSeries Tools direkt aus dem Internet
    By Kilianski in forum NEWSboard Server Software
    Antworten: 0
    Letzter Beitrag: 08-08-02, 17:07
  5. Von AS/400 direkt in MS-SQL-Server schreiben
    By Michael@Paff.de in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 28-04-02, 09:42

Tags for this Thread

Berechtigungen

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