View Full Version : Probleme mit IFS und CCSID
Hallo Forum,
folgendes Problem.
Ich habe per Windowslaufwerke eine IFS Datei kopiert. Diese hat nun als CCSID 819 der Inhalt der Datei ist jedoch 500 ! EBCDIC.
Wenn ich nun mit WRKLNK Option 5 die Datei anschaue wird Sie richtig dargestellt.
Jedoch erscheint eine Fehlermeldung
"Datei-CCSID ist nicht korrekt "
Wenn ich nun diese Datei über RPG öffne, bekomme ich jedoch nur Salat angezeigt ( vermutlich ASCII ).
Ich öffne diese Datei mit dem API "_C_IFS_OPEN"
Ich habe es auch schon mit folgenden Aufruf versucht
hFileHwd = open (%trim(Dateiname) + NULL : 'r, ccsid=500' )
gleiches Ergebnis.
Habe ich was übersehen. WRKLNK bringt das ja auch auf die Reihe. Was mache ich falsch ?
Für Anregungen wäre ich sehr Dankbar
gruß Franz
Beim Open gilt IMMER die CCSID der IFS-Datei. Der Parameter "ccsid=500" gilt nur dann, wenn die IFS-Datei selber keine CCSID hat (also *HEX=65535).
Beim Lesen werden die Daten dann in die JOB-CCSID konvertiert.
Wenn du die Datei über eine Freigabe von Windows auf das IFS kopierst, erhält die Datei die im NetServer eingestellte Standard-CCSID. Ändere dort die CCSID z.B. auf 1252 (Codepage ANSI=Windows). Der NetServer muss dann nochmal beendet und wieder gestartet werden.
Der WRKLNK konvertiert ebenso bei der Dateianzeige von der File-CCSID in die JOB-CCSID.
Schau dir die Datei noch mal über den Explorer im Windows an. Kannst du die Daten dort im Klartext lesen, dann sind das ASCII- und keine EBCDIC-Daten.
Hallo ,
Das was da drinsteht ist definitiv EBCDIC. Auf der Quellmaschine kann ich den Inhalt auch ohne Probleme mit RPG lesen.
Kann man eigentlich den bei IFS Dateien den Datei-CCSID ändern, ähnlich wie chpf ccsid(500) ? :confused:
gruß Franz
Eine Änderung der CCSID ist leider nicht möglich.
Beim CHGPF würde ich aber auch aufpassen, da dort dann eine Datenumsetzung erfolgt !
Hat die PF z.B. eine CCSID 273 und ich wechsle auf 500 werden alle Zeichenfelder von 273 auf 500 übersetzt. Möchte ich KEINE Umsetzung muss ich den Zwischenschritt über 65535 gehen.
Dein Problem ist das Kopieren von Maschine A auf Maschine B über das IFS.
Auf A wird die IFS in EBCDIC erstellt, also wahrscheinlich mit CCSID *HEX.
Kopierst du nun über Windows auf eine Netserver-Freigabe, erhält die Datei eine CCSID entsprechend der Einstellung des Netservers. Windoof kennt nämlich keine CCSID an Dateiobjekten.
Möchtest du die IFS-Datei nun in EBCDIC-500, musst du diese per CPYFRMSTMF in eine PF kopieren mit CVTDTA(*NONE) und ggf. wieder zurück in eine neue IFS-Datei mit CVTDTA(*NONE) oder die PF-Datei dann mit RPG verarbeiten.
Danke Baldur,
das wars. Ich habe die Datei mit
CPYFRMSTMF FROMSTMF('/home/FABAX/59466036')
TOMBR('/qsys.lib/fabax1.lib/test.file/test.mbr')
MBROPT(*ADD)
CVTDTA(*NONE)
in eine physische Datei kopiert, und dann mit
CPYTOSTMF FROMMBR('/qsys.lib/fabax1.lib/test.file/test.mbr')
TOSTMF('/home/FABAX/59466036')
STMFOPT(*REPLACE)
CVTDTA(*NONE)
DBFCCSID(*FILE)
STMFCODPAG(500)
wieder in IFS zurückgeholt. Dabei habe ich den Parameter STMCODPAGE auf 500 gestellt. Nun ist Sie absolut sauber und kann gelesen werden
Danke
gruß FX
Die CSSID der Datei kann wie folgt geändert werden:
WRLNK
Datei Editieren <2>
F15 Services
Auswahl <3>
Das hilft leider nicht für Batch, oder gibts dazu ein passendes Kommando ?
Ich denke eher, das der EDTF dann halt beim Speichern die Datei eben neu erstellt, was mit obiger Methode ja gemacht wird.
JonnyBrazil
16-03-07, 10:26
Das hilft leider nicht für Batch, oder gibts dazu ein passendes Kommando ?
Ich denke eher, das der EDTF dann halt beim Speichern die Datei eben neu erstellt, was mit obiger Methode ja gemacht wird.
Ab V5R3 sollte das mit CHGATR OBJ('/temp/test.txt') ATR(*CCSID) VALUE(800) funktionieren
chgatr geht auch bei V5R2.
Hallo!
Bei CHGPF werden keine Zeichen umgesetzt.
Es wird nur ein anderes Etikett aufgeklebt.
Ab diesem Zeitpunkt wird allerdings bei CPYF bzw. Schreib-/Leseoperationen eine Umsetzung zur Job-CCSID gemacht.
lg