-
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) ?
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.
-
Zitat von Fuerchau
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.
-
CHGPF
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
-
@alfredo
Das ist so nicht ganz richtig !
Beim CHGPF von 65535 (*HEX) auf eine andere CCSID oder umgekehrt ist das korrekt.
Baim CHGPF von CCSID xxx auf CCSID yyy (z.B. von 273 auf 285) erfolgt aber eine Datenkonvertierung !!!
-
CHGPF
@Fürchau
Dann versuch mal folgendes:
Gib in eine Datei(273) in ein Feld ÄÜ ein.
Ändere die Datei auf CCSID 870
Bei DSPDB siehst Du jetzt , aber nicht weil die Daten geändert wurden sondern die Zeichen von CCSID 870(Datei) auf CCSID 273(Job) gedreht wurden.
Wenn Du den Job auch auf 870 änderst, erfolgt keine Umsetzung, daher siehst Du auch wieder ÄU.
Bei DSPPFM erfolgt übrigens keine Umsetzung.
Das heisst:
Wenn man nachträglich eine lebende Datei auf einen andere CCSID umstellen will, muss man eine leere Datei mit dem neuen Zeichensatz anlegen und von der alten kopieren.
lg
alfred
Similar Threads
-
By steven_r in forum NEWSboard Programmierung
Antworten: 4
Letzter Beitrag: 30-01-07, 07:48
-
By PeterKarsten in forum NEWSboard Windows
Antworten: 2
Letzter Beitrag: 05-12-06, 14:14
-
By umeis in forum NEWSboard Windows
Antworten: 3
Letzter Beitrag: 11-08-06, 12:45
-
By kuempi von stein in forum IBM i Hauptforum
Antworten: 4
Letzter Beitrag: 19-07-06, 13:14
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks