Anmelden

View Full Version : Lesen IFS File mit korrekten Umlauten



Seiten : 1 [2]

Anton Gombkötö
27-09-13, 10:25
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. :-)

Fuerchau
27-09-13, 11:29
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!

SNO
20-04-15, 09:34
Bin nach längerer Recherche in diesem Thread gelandet.
Mein Problem war, ein Blz. Verzeichnis der Deutschen Bank, per Download ins IFS gestellt (als .xmlx und per Excel konvertiert in eine .csv Datei) in eine db2 Datenbank zu übertragen. Mit dem open und Ziel-CCSID 1141 war es nicht gelöst. Die Umlaute äöü und das ß wurden falsch bzw. nicht übersetzt.
Erst ein zuvor ausgeführtes CHGATR der Datei im IFS führte zur Lösung. Das sieht dann so aus:

cmd = 'CHGATR OBJ(' + hex7D
+ %trim(pfadundname) + hex7D + ') ATR(*CCSID) VALUE(1252)';
qcmdexc(%trim(cmd) : %len(%trim(cmd)));

fd = open(%trimr(pfadundname)
: O_RDONLY + O_TEXTDATA + O_CCSID
: S_IRGRP: 1141
);

dow readline(fd: %addr(line): %size(line))>=0;
"..."


Und natürlich funktioniert es auch mit CPYFRMSTMF:
// Hinweis: Funktioniert entweder mit STMFCCSID 1252 oder 1208
cmd = 'CPYFRMSTMF FROMSTMF('
+ hex7D + %trim(pfadundname) + hex7D
+ ') TOMBR('
+ hex7D + '/qsys.lib/qgpl.lib/test.file/test.mbr' + hex7D
+ ') MBROPT(*REPLACE) STMFCCSID(1252) DBFCCSID(1141)'
+ ' ENDLINFMT(*CRLF)'
;

Hinweis: pfadundname ist der String aus IFS Pfadangabe und Dateiname