[NEWSboard IBMi Forum]
  1. #1
    Registriert seit
    Sep 2018
    Beiträge
    4

    Question Textdatei mit Umlauten auf IFS

    Guten Morgen zusammen

    Ich hätte da mal wieder eine Frage zu Sonderzeichen und CCSIDs.

    Folgende Ausgangssituation:
    txt-Datei auf dem IFS mit CCSID 850 (wird aus einem SAP-System exportiert)
    CCSID der PF: 500
    CCSID des Jobs: 500

    Nun habe ich das Problem, dass die Sonderzeichen nicht richtig in der Zieltabelle ankommen.
    Geöffnet/gelesen wird die txt-Datei mit den Befehlen fopen und fgets.

    Ich habe bereits mit den unterschiedlichen CCSIDs ausprobiert. Wenn ich die txt-Datei auf CCSID 1208 stelle werden mir zumindest bei der Anzeige über WRKLNK die Sonderzeichen angezeigt. Das Import-Programm läuft dann allerdings wegen einem Fehler in der Umsetzung auf Fehler.

    Reichen die Informationen so um mir eine Hilfestellung zu geben?


    Danke im Voraus
    Oliver

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Also 850 (ASCII) wird eigentlich überhaupt nicht mehr verwendet sondern 1252 (ANSI west).
    Ursache der 850 ist wohl eine Netserver-Einstellung der Default-CCSID auf 850 statt 1252.
    Wenn du die Datei mit Windows Notepad oder Notepad++ problemlos anzeigen kannst, sollte 1252 richtig sein.
    1208 ist UTF-8 und eher unwahrscheinlich.
    Per CHGATR kannst du die CCSID der IFS auf 1252 ändern und noch mal probieren.
    Beim CPYFRMIMPF/CPYFRMSTMF kannst du die CCSID 1252 auch explizit angeben.
    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
    Oct 2013
    Beiträge
    171
    Was für Parameter stehen denn beim fopen?

    Dem Verhalten nach klingt es so, als ob die Datei tatsächlich in UTF-8 (CCSID 1208) geschrieben worden wäre.

    Wenn das Programm was Anderes als 1208 erwartet, ist das natürlich blöd und man müsste die Datei vorher am besten umkopieren; das Ändern des (richtigen) Attributs auf was Anderes (ohne den Inhalt zu ändern) reicht da nicht.

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Der fopen/fread konvertiert beim Lesen die Daten von der Stream-CCSID in die CCSID des Parameters fopen (z.B. 273/1141).
    Also ist die IFS-Datei mittels CHGATR auf die korrekte CCSID zu setzen (von 850 auf z.B. 1208/1252).
    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
    Sep 2018
    Beiträge
    4
    Vielen Dank für die schnellen Antworten.

    Die Lösung war allerdings nicht dabei.

    Hier nochmal etwas "bildlicher:
    CCSID der bereitgestellten Datei: 1252

    Wenn ich mir diese Mit Notepad++ anschaue sehen die Datensätze folgendermassen aus:
    Click image for larger version. 

Name:	Input.jpg 
Views:	28 
Size:	40,8 KB 
ID:	478

    Wenn ich über WRKLNK mir die Datei anschaue, sehe ich das:
    Click image for larger version. 

Name:	Output.jpg 
Views:	29 
Size:	67,5 KB 
ID:	479

    Und so sieht das dann nachher auch in der Zieltabelle aus.

    Ein manuelles bearbeiten funktioniert, ist aber nicht praktikabel, da die Datei täglich neu erstellt wird.
    Mein letzter Ansatzpunkt wäre, die Sonderzeichen im Programm manuell umzusetzen.

  6. #6
    Registriert seit
    Oct 2013
    Beiträge
    171
    Das sieht nach 2-Byte-Darstellung aus, wie es für UTF-8 typisch ist.
    Wenn Du uns die Hex-Darstellung (F10) geschickt hättest, könnte man es hundertprozentig sagen.
    Das "ö" wäre C3B6, und das "ä" C3A4.
    Und was der fopen macht, kann man ihm mit Flags (bzw. Bits) ganz genau sagen.
    Wenn die Datei CCSID 1208 hat und das Importieren nicht hinhaut, muss es eigentlich an den Flags beim fopen liegen.

  7. #7
    Registriert seit
    Sep 2018
    Beiträge
    4
    Erneut vielen Dank für dir prompte Antwort.
    (Ich liebe es, wenn ein Forum funktioniert)

    In der Hex-Darstellung steht für das ö tatsächlich C3B6. Demnach also definitiv UTF-8.

    Der fopen ist in einer externen Prozedur gekapselt. Da möchte ich im Livesystem ungerne Änderungen vornehmen. Der Befehl wird auch ledglich mit dem Parameter "r" aufgerufen. Eine CCSID wird dort gar nicht verwendet.
    Zum Testen habe ich das Import-Program kopiert und führe den fopen dort direkt aus. Aber wenn ich dort den Parameter o_ccsid auf 1141 setze führt das auch nicht zum Erfolg.

    Ich werde jetzt mal mit dem CPY-Befehl testen...

  8. #8
    Registriert seit
    Nov 2003
    Beiträge
    2.304
    UTF-8 hat CCSID 1208.

    Zitat Zitat von OSmeilus Beitrag anzeigen
    Zum Testen habe ich das Import-Program kopiert und führe den fopen dort direkt aus. Aber wenn ich dort den Parameter o_ccsid auf 1141 setze führt das auch nicht zum Erfolg.

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Du musst per CHGATR die CCSID der IFS-Datei auf 1208 setzen.
    Dann öffnet man die IFS-Datei mit 1200 (Feld-Typ C für UCS2) oder mit 1141/273 für westeuropäisch EBCDIC.
    Damit wird die Datei beim Lesen von der File-CCSID (Attribut) in die gewünschte CCSID konvertiert!
    Die CCSID beim Open soll mir den Code so liefern wie ich ihn benötige, nicht wie die Daten ihn hat.
    Dies ist analog zu sehen wie die CCSID einer PF und der CCSID des Jobs.
    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

  10. #10
    Registriert seit
    Sep 2018
    Beiträge
    4
    Prima!

    So klappt es.
    Und das Modul mit dem gekapselten fopen wird auch nur von diesem einen Programm aufgerufen. Somit kann ich dort auch die Änderung für den zusätzlichen Parameter o_ccsid einbauen.

    Vielen Dank!

  11. #11
    Registriert seit
    Feb 2001
    Beiträge
    20.207
    Ich würde da in das Modul eher eine 2. fopen()-Prozedur mit dem Zusatzparameter CCSID einbauen, so dass die ursprünglichen Funktionen weiter genutzt werden können und kompatibel bleiben.
    Die read/write/close-Funktionen betrifft die Änderung ja nicht.
    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. Lesen IFS File mit korrekten Umlauten
    By hteufl in forum NEWSboard Programmierung
    Antworten: 12
    Letzter Beitrag: 20-04-15, 10:34
  2. cpyfrmpcd mit Umlauten
    By jimknopf99 in forum IBM i Hauptforum
    Antworten: 4
    Letzter Beitrag: 27-01-15, 13:28
  3. Textdatei aus dem IFS öffnen?
    By SourceCoder in forum NEWSboard Java
    Antworten: 13
    Letzter Beitrag: 13-03-14, 13:38
  4. AS/400 Spool als Textdatei drucken
    By Peter Kosel in forum NEWSboard Drucker
    Antworten: 3
    Letzter Beitrag: 29-05-01, 16:34

Tags for this Thread

Berechtigungen

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