Anmelden

View Full Version : Dateiformatkonvertierung nach Umstellung von FTP auf SFTP



Bratmaxxe
24-08-17, 09:26
Moin liebe Mitstreiter,

wir sind im Entwicklerteam dazu angehalten worden, FTP-Transfers gegen SCP oder SFTP abzulösen.

Nun stehe ich vor dem glorreichen Problem, dass bei der FTP Variante (AS/400 -> UNIX) immer der Transfermodus "ASCII" gewählt wurde.

Übertragen wird eine per DDS beschriebene Datei (mwkqfert) wie folgt:


ftpuser password
ascii
cd /home/etc
put dateien/dummy.dummyin .mwkqlock
put dateien/mwkqfert.mwkqfert mwkqfert
delete .mwkqlock
quit
enter


Laut google unterstützten SCP und SFTP den ASCII-Mode nicht, was dazu führt, dass der gesamte Dateinhalt in einer einzigen Zeile in einem nicht lesbaren Format auf der Unix-Seite ankommt ;(
Weiß einer Rat, wie man dieses Problem gelöst bekommt?

Viele Grüße
Bratmaxxe

Fuerchau
24-08-17, 10:05
Da musst du leider den Umweg über das IFS machen.
Du kannst per CPYto|frmIMPF die Datei in ANSI 1252 umwandeln und dann per sftp übertragen.
Eine automatische Konvertierung wird wohl nicht angeboten (auch bei vielen anderen Clients) sondern nur noch binär übertragen (was auch bei anderen insbesonders bei CR/LF wohl ein Problem ist).
Auch bei einem ggf. unterstützen "text mode" scheint es sich nur um eine unixspezifische umwandlung von CR in CRLF bzw. wieder zurück zu handeln.

Bratmaxxe
24-08-17, 13:29
Hallo Baldur,

danke für den Tip - allerdings sieht das Endergebnis nicht so aus, wie ich es erwartet hatte....

ALT:
403


Neu (CPYTOIMPF):
401

Die Nullen bei 394 fehlen und es werden auch 2 Leerzeichen dazugemauschelt...
Wie bekommt man sowas in den Griff?

Gruß
Bratmaxxe

Fuerchau
24-08-17, 14:31
Sollte so funktionieren:
DTAFMT(*FIXED) STRDLM(*NONE) NUMFLDPAD(*ZERO)

Bratmaxxe
24-08-17, 14:53
Hallo Baldur,

mein Befehl sieht wie folgt aus:



CPYTOIMPF FROMFILE(DATEIEN/MWKRFERT) TOSTMF('/home/temp/mwkrfert') MB
ROPT(*REPLACE) RCDDLM(*LF) DTAFMT(*FIXED) STRDLM(*NONE) NUMFLDPAD(*ZERO)
STMFCCSID(1252)


Anbei noch die Dateidefinition:


A R MWKRFERT00
A*
A KRKTR 4S 0
A*
A* // TRENNFELD
A KRTR1 1 DFT('|')
A*
A KRNAME 20
A*
A* // TRENNFELD
A KRTR2 1 DFT('|')
A*
A KRVERS 2


Ich verstehe nicht, warum er aus dem KRKTR ein 6 stelliges Feld nach dem CPYTOIMPF macht:
404


Ein richtig schmutzige Lösung wäre, sofern man es nicht hinbekommt, dass das Ausgangsformat passt, einen FTP nach /home/temp/ mit MODE ASCII zu machen und dann den SCP/SFTP abzusetzen ;)

VG Bratmaxxe

Fuerchau
24-08-17, 15:08
Da bin ich allerdings auch überfragt. Mach dochmal einen Fehler bei IBM auf.
Der Umweg über Lokal-FTP ist gar nicht so schlecht, zumal der nicht viel langsamer als der CPY ist.

Pikachu
25-08-17, 08:26
Probier mal mit CPYTOSTMF (wobei der nur Quellendateien oder programmbeschriebene Dateien nimmt).

Pikachu
25-08-17, 08:30
Oder nimm mal den CPY.

Fuerchau
25-08-17, 08:50
Wie schon beschrieben, der CPYxxSTMF unterstützt blöderweise und ohne Grund keine DDS/SQL-Dateien.
Beim CPY habe ich noch nicht ausprobiert wie dieser mit numerischen Feldern umgeht, da diese keine CCSID haben und ob CRLF eingefügt werden.
Alternativ kann man ggf. noch per QSH den "iconv" bemühen. Aber die lokale FTP-Lösung scheint die einfachste zu sein.