Anmelden

View Full Version : Wieder einmal: FTP und CCS



Seiten : [1] 2

Hubert
29-08-07, 16:04
Hallo zusammen,

nachdem ich im Forum die entsprechenden Beiträge durchforstet habe, konnte ich das Problem noch nicht lösen:

Ich erstelle auf der i5 ein Streamfile. Wenn ich das mit DSPLNK ansehe habe ich diesen Inhalt:

UNA:+.? UNB+UNOC:3+40128780000002:14545053400017 UNH+ME 4711DESADV:D:96A:UN:EAN0 BMG+351+DES 4711 DTM+11:200708

Wenn ich diese Datei jetzt per FTP herunterlade sieht sie so aus:

ᘀ乕㩁⸫‿乕⭂乕䍏㌺㐫㄰㠲㠷〰〰〰㨲㐱㐵〵㌵〴〰㜱舀乕⭈䕍†㜴ㄱ䕄䅓噄䐺㤺䄶唺㩎䅅ぎጀ䵂⭇㔳⬱䕄 ⁓㐠ㄷ1䐏䵔ㄫ㨱〲㜰㠰

Auf der i5 wird die Datei mit der CCS 37 angelegt, auch wenn ich dem open eine andere CCS mitgebe. Ich habe auch geprüft, ob die Übertragung binär erfolgt und explitit auf ASCII umgeschaltet.

Bei der Übertragung von Datenbankdateien ist das Ergebnis ok. Die Übertragung von / zu einer anderen i5 ist auch sauber.

Hat jemand eine Idee, was ich noch machen kann?

Danke

Hubert

Fuerchau
29-08-07, 17:27
Du musst auf dem IFS die CCSID 1252 bzw. *PCASCII verwenden.
FTP selber macht keine Codewandlung !

DSPLNK auf der AS/400 zeigt mit Codewandlung an, kann also auch 1252 korrekt darstellen.

Hubert
29-08-07, 18:16
Ich habe es mit der Einstellung beim open versucht, aber ich bekomme immer nur die 37. An den Verzeichnissen selbst kann ich nichts ändern; die Maschine wird von mehreren Ländern genutzt und in Kanada verwaltet.


c eval permiss = S_IRUSR + S_IWUSR +S_IXUSR
c eval Codepage = 1252
c eval file = '/home/TEST.dat' + NULL
c eval o_flag = O_WRONLY + O_Create
c eval fd = open(%trim(file):O_Flag:CodePage)
c if fd > 0

Fuerchau
29-08-07, 18:59
Beim Openflag musst du noch o_codepage angeben sonst wirkt die Codepage nicht (gabs hier schon mal im Forum).

Hubert
30-08-07, 14:39
Danke, das o_codepage wusste ich nicht.

Jetzt wird ein File mit einer anderen Codepage erstellt, aber nicht die 1252.

Ich habe jetzt folgendes versucht:

Die Daten in ein PF geschrieben und mit CPYTOSTMF kopiert. Dann konnte ich das IFS File per FTP herunterladen.
Danach habe ich die Daten mit dem Programm ins IFS File geschrieben. Beim Herunterladen auf den PC hatte ich wieder Datensalat.

Ich muss aber direkt ins IFS schreiben, weil beim CPYTOSTMF nach jedem Satz ein LF bzw. CR eingefügt wird. Das darf aber laut Anforderung nicht sein.

Fuerchau
30-08-07, 15:04
Versuch es mit
CPYTOSTMF ... ENDLINFMT(*FIXED)

Fuerchau
30-08-07, 17:49
PS:
Hast du den Parameter für die Codepage auch korrekt definiert ?

Hubert
03-09-07, 16:18
Der Codeschnipsel zum Öffnen incl. Codepage Definition:


d CodePage s 10i 0 inz(1252)

* Define open attributes

c eval oflag = O_WRONLY + O_Create +
c O_TextData + O_TRUNC +
c O_Codepage

* Define Mode attributes

c eval Mode = S_IRWXU + S_IRWXO

c eval fd = open(%trim(file):OFlag:
c Mode:CodePage)

Das File hat dann:

Coded character set ID . . . . . . . . : 5348

Ich habe auch schon versucht, Codepage mit dem Format "u" oder als Konstante zu definieren: mit dem gleichen Misserfolg.

CPYTOSTMF ... ENDLINFMT(*FIXED) bringt mich auch nicht weiter, weil dann im STMF durch Einfügen von Blanks alle Zeilen auf die Länge des DB Files gebracht werden.

Fuerchau
03-09-07, 16:33
Codepage ist, glaube ich, nur 5U 0 !
Prüfe mal die Open-Definition, ob short oder integer definiert ist.

Hubert
03-09-07, 17:36
Es ist integer definiert. Trotzdem hab ich mal versuchsweise mit 5U 0 gewandelt; dann gabs einen Laufzeitfehler.

Außerdem ist mir beim Prüfen der Daten aufgefallen, dass das File mit NULL beginnt und bei jedem write hinten 1 - 2 Stellen weglässt und ebenfalls NULL einfügt. Ist das normal?