[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Apr 2005
    Beiträge
    73

    Daten mit CCSID 1208 in IFS Schreiben

    Hallo an Alle!

    Ich habe ein Problem Unicode Daten im IFS zu erstellen. Lt. der Bescheibung von Scott Klement soll die Konverierung automatisch geschehen, wenn eine IFS Datei mit CCSID 1208 neu erstellt, danach geschlossen mit schließlich dem Flag mit O_TEXTDATE neu geöffnet wird. Eine Konvertierung geschieht devinitiv aber meiner Meinung nach nicht 1208 codiert, da kein Zeichen lesbar ist.

    Hier der Code der Dateierstellung:
    fdpic = open(%trim(path) + %trim(IFSFilenamePic)
    : flags : mode : 1208);
    if fdpic < 0;
    ErrMsg = %str(strerror(errno));
    callp die('open(IFS File): ' + ErrMsg) ;
    endif;

    callp(e) close(fdpic);
    if %error;
    exsr *pssr;
    endif;

    // flags = o_textdata + o_wronly; // Umsetzungsfehler
    flags = o_wronly + o_textdata + o_ccsid;

    fdpic = open(%trim(path) + %trim(IFSFilenamePic)
    : flags);
    if fdpic < 0;
    ErrMsg = %str(strerror(errno));
    callp die('open(IFS File): ' + ErrMsg) ;
    endif;


    Das Ergebnis ist alles andere als erbaulich:
    4c 4f c4 d6 c3 e3 e8 d7 c5 40 88 a3 94 93 6e 0d
    25 4c 88 a3 94 93 6e 0d 25 4c 94 85 a3 81 40 83
    88 81 99 a2 85 a3 7e 7f a4 a3 86 60 f8 7f 6e 0d
    25 4c a2 83 99 89 97 a3 40 a3 a8 97 85 7e 7f a3
    85 a7 a3 61 91 81 a5 81 a2 83 99 89 97 a3 7f 40
    a2 99 83 7e 7f 4b 4b 61 91 a2 61 91 98 a4 85 99
    a8 60 f3 4b f5 4b f1 4b 94 89 95 4b 91 a2 7f 6e
    4c 61 a2 83 99 89 97 a3 6e 0d 25 4c a2 83 99 89
    97 a3 40 a3 a8 97 85 7e 7f a3 85 a7 a3 61 91 81


    %L¢ƒ™‰—£@£¨—…~£…§£a‘¥ ƒ™‰—£@¢™ƒ~KKa‘¢a‘˜¤…™¨` óKõKñK”‰•K‘¢nLa¢ƒ™‰—£n

    Was habe ich beim Erstellen der Datei falsch gemacht?

    Vielen Dank für Euro Hilfe im Voraus

    Hermann

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.238
    Nicht beim Erstellen der Datei sondern bei deiner Laufzeitumgebung.
    Wie soll das System die Codewandlung in 1208 vornehmen, wenn dein Job auf CCSID(65535) steht?
    Du könntest die Daten auch in ein Feld vom Typ C (Unicode) bereitstellen, was allerdings ebenso eine korrekte CCSID des Jobs voraussetzt.

    Die Daten die du ausgibst sehen sehr nach EBCDIC aus, z.B. 0D 25 entspricht EBCDIC CRLF.

    Bei der ganzen CCSID-Thematik wird leider immer wieder vergessen, dass ein Job eine CCSID haben muss, damit alles korrekt läuft.
    Solange man aber die Systeme immer mit QCCSID 65535 betreibt stößt man letztlich auch immer wieder auf dieselben Probleme beim Im- und Export zu Drittsystemen.

    Z.B. werden QZDA-Jobs immer auf eine CCSID geändert, da sonst SQL ständig Fehler produzieren würde.
    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 2003
    Beiträge
    746
    Moin,

    probier's mal so:

    IfsLink =
    Flags = O_WRONLY + O_CREAT + O_APPEND + O_CCSID;
    Mode = S_IRWXU + S_IRWXG + S_IRWXO;
    Fd = Open(%Trim(IfsLink):Flags:Mode:1252);

    Callp Close(Fd);
    Fd = Open(%Trim(IfsLink):O_CCSID+O_WRONLY+O_TEXTDATA:0: 0);

  4. #4
    Registriert seit
    Apr 2005
    Beiträge
    73
    Hallo Furchau!

    Vielen Dank für deine Antwort! Auf unserer Power 9 ist der Systemwert QCCSID auf 1141 eingestellt! Somit läuft der Job mit der JOB CCSID 1141!

    Sprachen-ID . . . . . . . . . . . . . . . . . . . : DEU
    Landes- oder Regions-ID . . . . . . . . . . . . . : AT
    ID des codierten Zeichensatzes (CCSID) . . . . . : 1141
    Standard-ID des codierten Zeichensatzes . . . . . : 1141
    Steuerung für Zeichen-ID . . . . . . . . . . . . : *DEVD



    Danke
    Hermann

  5. #5
    Registriert seit
    Apr 2005
    Beiträge
    73
    Guten Morgen RobertMack!

    Auch Dir vielen Dank für deine Antwort! Soll beim Erstellen der IFS Datei die korrekte CCSID angegeben werden (1208)? Ich habe Deinen Versuch nachgestellt und es funktioniert soweit auch, nur die CCSID der Datei und auch der Dateninhalt sind meiner Meinung nach CCSID 1252 und nicht CCSID 1208!
    Notepad++ zeigt für die Codierung Windows ANSI CRLF an. Auch die Beispielumlaute sind lesbar und sollten meiner Meinung nach als Doppelbyte in 1208 dargestellt werden.

    Beispiel:
    §52/11b Ende einer Zonenbeschränkung 30
    470x630/2 Typ 2


    Danke
    Hermann

  6. #6
    Registriert seit
    Feb 2001
    Beiträge
    20.238
    Wir haben hier auch schon mal diskutiert, dass dies inzwischen mit den SQL-Methoden SQLTYPE(CLOB_FILE) erheblich einfacher zu lösen ist.
    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. Daten einer CCSID 1208 Datei lesen
    By hteufl in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 20-03-20, 12:09
  2. Antworten: 3
    Letzter Beitrag: 16-03-17, 13:46
  3. ccsid 273 /1153 nach 1208 (Unicode)
    By K_Tippi in forum NEWSboard Programmierung
    Antworten: 3
    Letzter Beitrag: 01-09-15, 10:48
  4. Antworten: 11
    Letzter Beitrag: 11-07-14, 10:32
  5. Antworten: 3
    Letzter Beitrag: 25-02-02, 22:27

Berechtigungen

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