Anmelden

View Full Version : End-of-Line, Codepage



Seiten : [1] 2

bufcs
20-03-06, 13:26
hallo,
ich habe zwar schon das Forum durchsucht, aber noch keine so richtige Zusammenfassung des Codepage-Problems gefunden.

Mein Problem ist folgendes :

Abholung einer Datei auf einer AS400 auf einen Window2 - Server.

Wenn ich TYPE "A" benutze, klappt zwar alles, aber ich erhalte keine Umlaute mehr. Bei TYPE "I" kommt EBCDIC, was ebenfalls unbrauchbar ist.

Bei TYPE "E" erhalte ich alles korrekt bis auf das End-Of-Line (EOL). Hier steht seltsamerweise ein Hexcode 85 ( DECIMAL 133). Ich habe dort den AS400-Administrator gefragt, ob er eine Ahnung hat, woher das kommt, aber ich erhalte die Antwort, das gäbe es nicht. Gibt es aber doch.

Ich muss das Ganze automatisieren und durch einen Router zu anderen Maschinen im Netz schicken, aber dieses HEX85 stört sehr, da diese Maschine und auch ein IBM-Mainframe dieses EOL benutzen.

In Scripts benutzt man doch üblicherweise sowas wie "\n" für 0A (UNIX-EOL). Ich möchte doch nicht für jede Maschine erstmal herausfinden, was da kommt.

Habt Ihr einen Tipp für mich, so etwas wie TYPE C 850 oder was.

Gruss
bufcs

Fuerchau
20-03-06, 13:57
Das Abholen per FTP direkt aus einer PF scheitert häufig an der Umsetzung.
Ich gehe immer den Umweg über das IFS.
Per CPYTOSTMF/CPYTOIMPF die Datei mit korrekter CCSID erstellen (850/1252) und anschließend per FTP kopieren.

Was wird denn als EOL erwartet ?

bufcs
20-03-06, 14:04
hallo,
erst einmal danke für die Antwort. Soweit ich verstehe, müsste das auf der AS400 geschehen.
Aber noch zur Frage, ich hätte sehr gerne entweder 0A (UNIX) oder 0D0A (Windows) als EOL haben.

gruss
bufcs

Fuerchau
20-03-06, 14:11
Das gibst du beim CPYTOIMPF direkt an: ... RCDDLM(*CRLF) ...

bufcs
20-03-06, 14:35
hallo, danke,
aber ich bin kein AS400 - Spezialist,

wie würde das in einer FTP-Receive-Script denn aussehen ? Bis jetzt habe ich nur
folgendes .

GET des Files :

@-RECV %TRIG0%MBR; # Empfang des Members aus der library
und
#----------------------------------

# making original file file empty wenn status ok

#----------------------------------

QUOTE "RCMD clrpfm FILE("%TRIG0")";

Also soweit ich das kapierem muss doch jetzt vor dem RECEIVE noch irgendwas kommen ?

gruss
bufcs

Fuerchau
20-03-06, 15:57
Per FTP-Script geht es nur sehr bedingt.
Am besten ist es, du läßt dir die Datei auf der AS/400 bereits im IFS bereitstellen.
Über eine Netzwerkfreigabe benötigst du dann noch nicht ein mal FTP um die Datei dann herunter zu laden.

bufcs
21-03-06, 08:22
hallo,

danke für die Antwort. Um es kurz zu rekapitulieren :

Das von einem Programm erstellte File (member) in ein anderes member
kopieren ? Mit der entsprechenden CCSID versehen und das gewünschte EOL angeben.

Wenn das geschehen ist, das File/member immer noch mit TYPE "E" abholen ? Oder geht dann TYPE "I" ?

Was ist eigentlich nicht verstehe, ist, dass bei meinem bisherigen Vorgehen alles soweit korrekt kommt, jedoch ein EOL von DEC 133 gemäss Codepage 1252 oder 819 herauskommt.

Ist das irgendwie willkürlich ?

Fuerchau
21-03-06, 11:20
So würde ich normalerweise vorgehen.
Die zu übertragenden Daten liegen dann bereits im ASCII/ANSI-Format vor und können einfach binär abgeholt werden.
Allerdings sind sie nicht mehr im Typ Lib/File/Mbr sonder im IFS mit z.B. /Home/MyVerz/MyFile. Beim FTP ist dann "NAMEFMT 1" anzuwenden.

bufcs
22-03-06, 07:37
danke,

das Problem ist allerdings, dass ich meinen Kunden kaum dazu bewegen kann,
seine Imlementation zu ändern, da noch ein komplexeres Spiel mit Triggern und Sperrfiles (membern) ins Spiel kommt.
Gibt es denn keine Möglichkeit, dies auf der Lib/File/Mbr Mimik zu erledigen ?

gruss
bufcs

Fuerchau
22-03-06, 08:06
Das hast du ja schon versucht und die Daten eben so erhalten, wie es möglich ist.
"TYPE C nnnn" wirkt nur auf PUT für neu erstellte Dateien um eine Codepage anzugeben.
Beim GET hast du halt nur die Varianten als ASC- bzw. BIN-Format die Daten so abzuholen, wie sie zur Verfügung gestellt werden.
Irgendeine Anpassung der Daten kann nicht mehr erfolgen.

Die CCSID's für ASCII und EBCDIC werden folgendermassen bestimmt:
CHGFTPA CCSID(nnnn) => ASCII-CCSID, default 819
CHGSYSVAL QCCSID VALUE(nnnn) => EBCDIC-CCSID, defualt 65535 = HEX

Das Ändern dieser Werte gilt aber systemweit und hat ggf. Einfluss auf andere Job's.