[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
    17.641
    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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

  3. #3
    Registriert seit
    Oct 2013
    Beiträge
    153
    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
    17.641
    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: http://www.fuerchau.de/software/upload400.htm
    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:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Input.jpg 
Hits:	9 
Größe:	40,8 KB 
ID:	478

    Wenn ich über WRKLNK mir die Datei anschaue, sehe ich das:
    Klicken Sie auf die Grafik für eine größere Ansicht 

Name:	Output.jpg 
Hits:	9 
Größe:	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
    153
    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.231
    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
    17.641
    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: http://www.fuerchau.de/software/upload400.htm
    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
    17.641
    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: http://www.fuerchau.de/software/upload400.htm
    BI? Da war doch noch was: http://www.ftsolutions.de

Ähnliche Themen

  1. Lesen IFS File mit korrekten Umlauten
    Von hteufl im Forum NEWSboard programmierung
    Antworten: 12
    Letzter Beitrag: 20-04-15, 09:34
  2. cpyfrmpcd mit Umlauten
    Von jimknopf99 im Forum System i Hauptforum
    Antworten: 4
    Letzter Beitrag: 27-01-15, 12:28
  3. Textdatei aus dem IFS öffnen?
    Von SourceCoder im Forum NEWSboard java
    Antworten: 13
    Letzter Beitrag: 13-03-14, 12:38
  4. AS/400 Spool als Textdatei drucken
    Von Peter Kosel im Forum NEWSboard drucker
    Antworten: 3
    Letzter Beitrag: 29-05-01, 15:34

Stichworte

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •