PDA

View Full Version : CCSID eines PF aus java herausfinden



Seiten : 1 [2]

Fuerchau
30-08-04, 17:34
PS:
Mit CP273 erhältst du die Daten in EBCDIC und mnusst sie auch noch selber wandeln.
JAVA arbeitet z.B. in ISO8859-1 oder sogar UNICODE.
Wo ist da der Vorteil, alles selber machen zu müssen ?

rod
30-08-04, 17:38
Es geht hier um die Umsetzung einer DB die auf allen Plattformen erst in Textdateien ausgelesen werden , das wollte ich mir auf der AS/400 schenken. Und anschliessend in einem neuen Format per jdbc in die DB geschrieben wird.
Diese Funktionalität ist so gewählt, da es einfacher ist, die DB auszulesen, wegzuschmeissen, neu aufzubauen und zu befüllen, als zwei parallele DBs zu haben, das hiesse erst eine komplett neue DB anzulegen, und dann zwischen diesen hinundherzuschaufeln. Auf der AS/400 ist das recht einfach, aber mit MSSQL, Oracle usw ist das nicht so einfach....

Schönen Gruß

Roderich

rod
30-08-04, 17:42
Hallo,

mit Cp273 lese ich die Daten nur mit der richtigen Codepage, Javaintern habe ich sie immer in UNICODE.
Die Konvertierung erfolgt automatisch bei Angabe der richtigen Codepage.

Schönen Gruß
Roderich



PS:
Mit CP273 erhältst du die Daten in EBCDIC und mnusst sie auch noch selber wandeln.
JAVA arbeitet z.B. in ISO8859-1 oder sogar UNICODE.
Wo ist da der Vorteil, alles selber machen zu müssen ?

BenderD
30-08-04, 18:09
Hallo,



new FileInputStream(file, "Cp273"));
Roderich

was hast Du da für einen FileInputStream? meiner (JDK SE 1.4.2) hat einen solchigen nicht?!

Dieter Bender

rod
30-08-04, 18:15
Hallo Dieter,

entschuldigung, mein Fehler:
mReader = new BufferedReader(new InputStreamReader(
new FileInputStream(file),"Cp273"));

das ist ein Parameter im Constructor des InputStreamReader

Schönen Gruß
Roderich




Hallo,



was hast Du da für einen FileInputStream? meiner (JDK SE 1.4.2) hat einen solchigen nicht?!

Dieter Bender

BenderD
30-08-04, 21:09
Hallo Roderich,

das ist bei knappen Codesnippets manchmal nicht so einfach, das auf einen Blick zu erfassen, zumal mich das file ein wenig verwirrt, der FileInputStream wäre auch mit dem Pfad zufrieden.
An die CCSID kommt man wohl über die File und co Objekte nicht dran, was weiß ein Windows oder Unix File dass es eine CCSID haben könnte und gar welche. Die einzige Chance wäre über das IFSFile Objekt aus dem Toolbox Zinnober, aber ich habe die Scheu immer noch nicht verstanden das auf einer AS400 in ein Streamfile zu schreiben, oder wo kommen die Daten denn her?
Ich bin allerdings immer noch nicht davon überzeugt, dass die falsche Umwandlung ohne Angabe der CCSID ein Feature und kein Bug ist - wie stehts mit euren Java PTFs?

mfg

Dieter Bender


Hallo Dieter,

entschuldigung, mein Fehler:
mReader = new BufferedReader(new InputStreamReader(
new FileInputStream(file),"Cp273"));

das ist ein Parameter im Constructor des InputStreamReader

Schönen Gruß
Roderich

rod
02-09-04, 13:10
Hallo zusammen,

ich denke die beste Lösung für mein Problem ist das einlesen der Dateien mit der Toolbox-klasse AS400File. Dann werte ich beim ersten Textfeld der Datei die ccsid wie folgt aus:



Record r = new SequentialFile(new AS400(), path).read();
AS400Text asText = (AS400Text) r.getField(<Spalte>);
int ccsid = asText.getCcsid();



(hier muss vorher sichergestellt werden, dass die Spalte <Spalte> vom Type AS400Text ist. Den FeldTyp kann man wie folgt erhalten:

int type = new SequentialFile(new AS400(), path).getRecordFormat().getFieldDescription(<Spalte>)
.getDataType().getInstanceType();

Die verschiedenen Datentypen sind in AS400DataType definiert



Viele Grüße und vielen Dank für die Tipps
Roderich

BenderD
02-09-04, 13:26
Hallo,

also für meinen Geschmack ist JDBC wesentlich einfacher und die Argumentation in einem früheren Posting von der Standard Anwendug, die mit mehreren Plattformen kann als Gegenargument gegen JDBC, wie verträgts sich das mit AS400File???

mfg

Dieter Bender


Hallo zusammen,

ich denke die beste Lösung für mein Problem ist das einlesen der Dateien mit der Toolbox-klasse AS400File. Dann werte ich beim ersten Textfeld der Datei die ccsid wie folgt aus:



Record r = new SequentialFile(new AS400(), path).read();
AS400Text asText = (AS400Text) r.getField(<Spalte>);
int ccsid = asText.getCcsid();



(hier muss vorher sichergestellt werden, dass die Spalte <Spalte> vom Type AS400Text ist. Den FeldTyp kann man wie folgt erhalten:

int type = new SequentialFile(new AS400(), path).getRecordFormat().getFieldDescription(<Spalte>)
.getDataType().getInstanceType();

Die verschiedenen Datentypen sind in AS400DataType definiert



Viele Grüße und vielen Dank für die Tipps
Roderich

rod
02-09-04, 13:34
Hallo,

da hast du Recht, jdbc wäre wesentlich einfacher, aber ich verwende dieses Konstrukt nur um die Codepage herauszufinden, und kann dann mit der richtigen Codepage einen InputStream zur Verfügung stellen. Per JDBC komme ich nicht zu einem InputStream.

Schönen Gruß
Roderich

Fuerchau
02-09-04, 13:56
Und ich habe immer noch nicht verstanden, warum ein InputStream nötig ist !
Haben deine Dateien keine Dezimalfelder ?
Wie sieht es da mit der Umsetzung aus ?