[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Jan 2012
    Beiträge
    1.102

    Ausländische Zeichen in Streamfile schreiben

    Hallo,
    ich möchte in eine Streamfile, die UTF-8 kodiert sein soll, Sonderzeichen (z.B. türkische oder polnische Buchstaben) schreiben.

    Im Prinzip mache ich über die Unix-Type APIs folgendes: (Hier etwas vereinfacht):

    Code:
    open64(file:OpenFlag:AccessFlag:1208:1141);
    dcl-s buffer          ucs2(64000);
    len = 1;
    buffer = 'A';
    // Errechnen der Anzahl der zu schreibenden Bytes:
    if len > 0;
       size = %size(%subst(buffer:1:len));
       AnzBytes = write(handle:address:size);
    endif;
    Im Debugger zeigt er mir folgende Werte:
    size: 2
    buffer (in hex): 0041

    In der Datei kommt aber folgendes an (in Hex, angesehen mit wrklnk):
    00C2A0

    Hat jemand eine Idee? Vielen Dank im Voraus!

    Dieter

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Klar, wenn du dem Open sagst, dass der Code im Buffer 1141 sein soll, du aber 1200 (UCS) reinstellst.
    Die x'00' bleibt unverändert.
    Die x'41' ist aber als EBCDIC ganz was anderes als ein 'A' und das wird dann in UTF8 als x'C2A0' dargestellt, was immer das für ein Zeichen sein soll.
    Nimm statt 1141 die 1200 oder statt UCS2 eben CHAR.
    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

  3. #3
    Registriert seit
    Jan 2012
    Beiträge
    1.102
    Vielen Dank Baldur. Genau das war's. Ich öffne die Datei jetzt mit ...1208:1200). Jetzt klappt es. Vielen Dank!

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Übrigens geht das viel einfacher über SQL CLOB_FILE und CLOB (seit V5R4) kann man zwischen IFS und Programm Dateien bis 16MB (Default) oder bei Aktivierung von Teraspace bis 2 TB schreiben, lesen und mit CCSID konvertieren.
    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 2012
    Beiträge
    1.102
    Danke für den Hinweis. Aber in meinem Problemfall muss ich aus meinem RPG-Programm heraus immer wieder kleine Datenmengen in eine Streamfile schreiben. Die Streamfile selber wird dabei manchmal größer als 16MB.
    So wie es jetzt implementiert ist, läuft es sehr schön und schnell.

  6. #6
    Registriert seit
    Aug 2001
    Beiträge
    2.869
    CLOB bzw. DBCLOB-Files können bis zu 2 GB groß werden (unabhängig davon ob mit oder ohne Teraspace gearbeitet wird).
    Auch kleine Datenmengen können aus RPG jederzeit (mit SQL-Befehlen) hinzugefügt werden.

    16MB ist die Grenze, wenn man mit LOB-Variablen arbeitet.

    ... und das Ganze geht übrigens nicht erst seit V5R4 sondern seit V5R1.

    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
    Das mit den 2GB ist korrekt, wenn man mit LOB-Locator arbeitet und sich immer per SQL-Substring die Teile rausholt oder setzt.
    Ohne Teraspace kann eine Programmvariable nur max. 16MB groß werden und da ist es etwas mühsam, 2GB zu verarbeiten.
    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 allerdings nicht von einem LOB-Locator (das geht natürlich auch), sondern von einer LOB-File geredet, damit kann man direkt ins IFS schreiben.

    Sowohl LOB-Locatoren als auch LOB-Files kann man mit SQL-Befehlen behandeln wie normale alphanumerische Felder, d.h. man kann Skalare Funktionen wie SUBSTR oder LOCATE einsetzen.

    Bei einer LOB-File kann man mit einem einfachen SQL SET-Befehl die nächsten Zeichen hinzufügen, vorausgesetzt, dass die File-Operation auf APPEND (SQAPP) gesetzt ist.

    Vielleicht noch eine Anmerkung zu LOB-Locators. Diese können nur unter Commitment-Steuerung verwendet werden.

    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

Similar Threads

  1. CLP nach F4 den Befehl linksbündig schreiben
    By harkne in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-11-15, 09:48
  2. Sonderzeichenproblem beim Schreiben in i5-Tabelle (z.B. €)
    By Karlchen50 in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 20-08-14, 15:14
  3. Satz in Datenbankdatei in CL schreiben??
    By JonnyRico in forum IBM i Hauptforum
    Antworten: 2
    Letzter Beitrag: 02-04-03, 16:52
  4. 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
  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
  •