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

    Lesen IFS File mit korrekten Umlauten

    Hallo Specialists!

    Ich habe ein Problem beim Lesen von IFS-Dateien die Umlaute enthalten. Ich weiß, dass das Thema schon zig mal behandelt wurde, aber die meisten Threads beziehen sich auf das Schreiben ins IFS. Ich erhalte also per FTP vom Kunden eine IFS-Textdatei die lt. Navigator die Codepage/CCSID 819 besitzt. Die Datei kann mit Windows Notepad korrekt gelesen werden - mit Umlauten!! In einem RPG Programm wird das IFS-File mit der C Routine read() gelesen.

    // Lesen der IFS-Neu
    flags = o_rdonly + o_creat + o_ccsid + o_textdata + o_text_creat;
    mode = s_irusr + s_iwusr + s_irgrp + s_iroth;
    fd = open(%trimr(path) + %trim(IFSFilename) : flags : mode : 1252 : 0);


    Ich habe die CCSID 1141, 1252 850. 437 und 819 ausprobiert. In allen Fällen wird auf der AS/400 der Textstring falsch angezeigt! Ich bin mit meinem Latein am Ende und hoffe auf Eure Hilfe!

    Danke im voraus
    Hermann

  2. #2
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Schau dir mal die Attribute (WRKLNK, CCSID) der Datei an bzw. mal mit Anzeige des Inhaltes.
    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
    Apr 2005
    Beiträge
    73
    Hallo Fuerchau!

    Danke für die Antwort. Mit WRKLNK wird ebenfalls die CCSID 819 angezeigt. Mit der Auswahl 5 werden die Daten auch mit Fehlern angezeigt! Anbei ein kleiner Auszug:
    "O1390714";"f.beyer@intelligent-group.com";"Bodenplatte für bestehende EKZ-Bremen Stele
    "O1389816";"werner@momag.at";"Zeitungsdispenser, Ausführung Àhlnich wie Dispenser NÃ

    Hermann

  4. #4
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Das deutet auf UTF-8 hin:
    "für"
    Das "ü" wird in 2-Bytes übertragen, also wohl UTF-8, das ist dann 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 2007
    Beiträge
    905
    Falls es jemanden interessiert, hier wäre noch eine Lektüre zu IFS und RPG.

    Working with the IFS in RPG IV
    kf

  6. #6
    Registriert seit
    Apr 2005
    Beiträge
    73
    Hallo Fuerchau!

    Ich habe das IFS File mit der CCSID 1208 geöffnet und gelesen doch die Umlaute sind dennoch falsch. Anbei der Butter aus read():

    "Angebotsnummer";"E-Mail";"Thema";"Datum";"Information";"Tex
    t""O1390360";"
    tobias.eisemann@pool-alpin.com";"Klapprahmen
    A0";"";"6";"""O1390714";"f.beyer@intelligent-group.com";"
    Bodenplatte für bestehende EKZ-Bremen Stele ON91SO01";"";"5
    ";"""O1389816";"
    werner@momag.at";"Zeitungsdispenser, Ausführung Àhlnich wie Dispenser NÃ Landes- kliniken";"24.10.2

    Bei den CCSID Experimenten ist mir aufgefallen, dass sich die Zeichen kaum ändern - vor allem die Umlaute!!

    Die Doku von Scott Klement habe ich mir auch schon zu gemüte geführt. Doch gerade beim read() API steht nicht wirklich etwas über Zeichenkonvertierung.

    Danke

    Hermann

  7. #7
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Die Zeichenkonvertierung wird eigentlich durch das Flag O_CCSID gesetzt und vom System dann automatisch durchgeführt.

    Versuche doch erst mal alternativ einen CPYTOSTMF mit der entsprechenden Konvertierung (als Ziel eine PF mit CRTPF und Satzlänge ohne DDS) durchzuführen.

    Besser ist es eigentlich, eine DDS/SQL-PF mit den Feldern anzulegen und einen CPYxxIMPF (ich weiß nie aus dem Kopf ob from oder to) durchzuführen.
    Das spart erheblichen Programmieraufwand und erleichtert das spätere 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
    Apr 2005
    Beiträge
    73
    Hallo Fuerchau!

    Du bist der Sache so glaube ich schon etwas näher gekommen.
    Mit CPYFRMSTMF und Parameter STMFCCSID = 1208 und Parameter DBFCCSID = 1141 werden die Zeichen in einem PF korrekt angezeigt. Ein Versuch die Daten im RPG Modul mit den Parametern:

    fd = open(%trimr(path) + %trim(IFSFilename) : flags : mode : 1208 : 1141);

    zu ermitteln brachte erneut folgendes Ergebnis:
    "Angebotsnummer";"E-Mail";"Thema";"Datum";"Information";"Tex
    t"

    "O1390360";"tobias.eisemann@pool-alpin.com";"Klapprahmen
    A0";"";"6";"""O1390714";"f.beyer@intelligent-group.com";"
    Bodenplatte für bestehende EKZ-Bremen Stele ON91SO01";"";"5
    ";""

    "O1389816";"werner@momag.at";"Zeitungsdispenser, AusfÃ
    ¼hrung Àhlnich wie Dispenser NÃ Landes- kliniken";"24.10.2
    013";"2";""

    "O1389422";"p.steger@forster.at";"Test: E-Mail
    Nacharbeit aus CRM";"24.11.2013";"2";""


    Danke

    Hermann

  9. #9
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Vielleicht kommt der open() ein wenig durcheinander da die Flags nicht eindeutig sind:
    flags = o_rdonly + o_creat + o_ccsid + o_textdata + o_text_creat;
    Die roten Flags sind zu viel, da du die Datei ja nur lesen und nicht erstellen willst.

    Laut Doku wird intern iconv() verwendet, es sollte also klappen.
    open()--Open File

    Verwirrend ist das Flag O_TEXT_CREATE:

    When the O_TEXT_CREAT flag and its prerequisite flags are not set, the specified or derived CCSID is the CCSID in which data is to be returned (when reading from a file), or the CCSID in which data is being supplied (when writing to a file).

    Versuche mal mit den diversen Flags zu spielen, aus der Doku werde auch ich nicht schlau wann und ob und von welcher in welche CCSID konvertiert wird.

    Ich halte mich da eh an die CPYxxx-Befehle.

    Nachtrag:
    Per CHGATR (bzw. QSHELL "touch") kann man die CCSID der Datei anpassen.
    Ggf. liegt es auch noch daran, da die ja wohl auf 819 (also ANSI) steht.
    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
    Apr 2005
    Beiträge
    73
    Hallo Fuerchau!

    Meine Experimente mit den flag-Attributen (o_text_create, o_create) haben keine Änderung gebracht. Erst als ich mit Notepad++ die Kodierung auf ANSI geändert habe funktionierte der Datenupload (ohne Angabe einer CCSID). Interessant ist nur, dass der OPS-Navigator trotzdem den Zeichensatz 819 anzeigt. So wie es aussieht hat die AS/400 mit UDF-8 ziemliche Probleme.
    Letztendlich heißt es für mich den Lieferanten der TXT Datei zu kontaktieren und ihn zu bitten die Datei in ANSI und nicht in UDF-8 zu erstellen.

    Danke für die vorbildliche Unterstützung

    Hermann

  11. #11
    Registriert seit
    Nov 2012
    Beiträge
    51

    Stimmt.

    So wie Ferrari mit manchen Kurven ein Problem hat. Es liegt auf keinen Fall am Fahrer, nein.

    Der Übeltäter ist doch offensichtlich der FTP-Server, der die empfangene Datei als 819 im IFS ablegt.
    Leider kenne ich keine Möglichkeit, mit irgendeinem Befehl vor dem Senden der Daten die CCSID 1208 anzugeben. (SITE CRTCCSID geht nur für EBCDIC).

    (Kann man gut mit einem FTP LOCALHOST ausprobieren, einfach mit lcd und cd ins selbe Verzeichnis stellen und eine Datei mit CCSID 1208 in eine neue, andere Datei senden. Bei mir hat die Kopie dann 819.)

    Vielleicht reicht es, wenn der sendende Partner nach dem PUT den Aufruf eines CHGATR einbaut?

    Auf alle Fälle gibt es einen Haufen Software auf der AS/400, die mit UTF-8-Daten sehr gut umgehen können.

    Aber vielleicht baut Ferrari mal Autos, mit denen man um jede Kurve fahren kann. Wurscht, wer drin sitzt. :-)

  12. #12
    Registriert seit
    Feb 2001
    Beiträge
    20.236
    Die Default-CCSID für IFS-Objekte die per Netzfreigabe ins System kommen, wird im NetServer festgelegt.
    Die CCSID für FTP (Ascii-Modus) wird per CHGFTPA festgelegt.
    Fremdsysteme außerhalb der AS/400 können das nämlich nicht.

    Das Problem sind hier die C-API's.
    Da die CPYxxxSTMF/CPYxxxIMPF mit der Angabe der CCSID korrekt umgehen können, liegt es wohl an denen, dass die "Standardumsetzung" so nicht funktioniert.

    Wie schon oben gesagt, was ist der Vorteil der C-API's gegenüber der Verwendung von CPY-Befehlen?
    Ich behaupte einfach mal: keiner!
    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. Datei aus IFS mit falschen Umlauten
    By jogisarge in forum NEWSboard Programmierung
    Antworten: 1
    Letzter Beitrag: 06-12-07, 15:35
  2. probleme file ins IFS stellen
    By steven_r in forum NEWSboard Programmierung
    Antworten: 4
    Letzter Beitrag: 30-01-07, 07:48
  3. Allgemeine Berechtigung für Jobs ... IFS Ordner ...
    By bode in forum IBM i Hauptforum
    Antworten: 1
    Letzter Beitrag: 30-10-06, 11:10
  4. fehlende DDS Sourcen: disassembler?
    By emax in forum IBM i Hauptforum
    Antworten: 3
    Letzter Beitrag: 06-10-06, 11:01
  5. Savf File per FTP
    By wuwu in forum IBM i Hauptforum
    Antworten: 5
    Letzter Beitrag: 18-08-06, 08:09

Berechtigungen

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