View Full Version : gepackte Daten in Streamfile
bettina_martin
05-04-06, 11:51
Hallo,
ist es möglich das es Probleme mit gepackten Daten (als gepackte numerische
Felder) in Streamfiles auf der AS/400 gibt ?
Wir bekommen seit neuesten eine Schnittstelle, die früher direkt in eine pysische Datei
ging, jetzt über streamfiles. Dort werden die gepackten Zahlen 'irgendwie' umgeschlüsselt, teilweise führt das in Programmen dann zum Absturz weil ungültige numerische Daten enthalten sind.
Hat da jemand eine Idee ? Liegt das am Zeichensatz ??
Wenn die Daten jetzt in Streamfiles ankommen müssten sie ja eigentlich in ungepacktem Format sein (als Text).
bettina_martin
05-04-06, 11:59
Wie meinst du das ?
Die Daten kommen mit 'Sonderzeichen' daher, d.h. so wie
gepackte Daten eben aussehen.
Dann müsstest du die Datei mittels
CPYFRMSTMF FROMSTMF('/home/myverz/myfile')
TOMBR('/qsys.lib/mylib.lib/myfile.file/myfile.mbr')
MBROPT(*REPLACE)
CVTDTA(*NONE)
ENDLINFMT(*FIXED)
TABEXPN(*NO)
in eine PF mit fester Satzlänge kopieren, von dort in die DDS-beschriebene Datei per CPYF ... FMTOPT(*NOCHK).
bettina_martin
05-04-06, 12:44
das habe ich auch so gemacht, jedoch
werden die Zahlen dann schon in dem PF mit fixer Satzlänge falsch umgeschlüsselt,
d.h. es stehen dort entweder nicht num. daten oder falsch umgeschlüsselte drinnen.
Dann sind die Quelldaten bereits so !
Durch CVTDATA(*NONE) erfolgt keinerlei Codewandlung.
Die Satzlänge der PF muss natürlich der erwarteten Satzlänge entsprechen.
Per DSPPFM => F10 kannst du in Hex-Sicht umschalten.
Kommt es zu Verschiebungen der Felder, stimmt die Satzlänge einfach nicht.
bettina_martin
05-04-06, 12:54
Bei CVTDATA(*NONE) werden überhaupt nur noch verstümmelte Daten
dargestellt. Bei CVTDATA(*AUTO) sieht das ganze normal aus, abgesehen von den
gepackten Daten.
Das ist dann wirklich ein Problem.
Da sind wohl Zeichendaten mit gepackten Daten vermischt worden. Dies lässt sich so einfach dann nicht mehr konvertieren.
Schau die die Daten erstmal über WRKLNK in Hex an.
Wenn die gepackten Daten i.O. sind und die Zeichendaten in ASCII musst du wohl oder übel mit CVTDATA(*NONE) kopieren und die Zeichendaten per QDCXLATE selber übersetzen.
Oder die Transferdatei darf eben keine gepackten Daten mehr enthalten und muss alles als Zeichendaten übergeben.
Ich habe dieses Problem wie folgt gelöst:
Identische Datentabelle erstellen und die gepackten Felder
in Format ZONED ändern.
CPYF Original in diese Tabelle.
In Streamfile kopieren wie gehabt.
Dann kann es evtl noch Probleme mit dem Vorzeichenbyte bei negativen Werten geben.
Gruß
Joe
Eben, da ist ein CPYFRMIMPF/CPYTOIMPF schon besser.