![]() |
Indy FTPClient + AS400
Hallo,
ich habe aktuell ein Problem mit dem Indy FTP Client (Version 10) eine Datei von einer AS 400 auf meinen Rechner zu übertragen. Die Datei wird zwar übertragen und besitzt auch einen Inhalt, dieser ist allerdings in eine Samlung von Symbolen anstelle der Zahlen die eigentlich in der Datei stehen sollten. Ich habe das ganze schon mit einem anderen Transfertyp probiert, allerdings ohne Erfolg. Wie kann ich das Problem jetzt beheben? Vielen Dank |
Re: Indy FTPClient + AS400
ich glaube nicht das es leute gibt die zu hause eine as400 stehn haben um das nachzubauen was du für ein problem hast, aber wenn die einzelnen zahlen im rahmen von Byte sind (0..255) und du die datei mit nem texteditor geöffnet hast kann es gut möglich sein das die Zahlen halt als Buchstaben/Smileys/Etc dargestellt werden. Schonmal die Datei im Hexeditor geöffnet und geguckt ob die Datei die werte enthält die sie haben soll?
|
Re: Indy FTPClient + AS400
Hi,
das liegt vielleicht daran, das das Feld in der DB ein packed field ist. Guck dir mal das an, das hat uns weitergeholfen. ![]() Gruss beber |
Re: Indy FTPClient + AS400
Erstmal danke für den Tipp, jetzt bin ich schon einen Schritt weiter, wenn auch nicht fertig.
Also, der Inhalt meiner Datei auf der As400 ist Zitat:
Zitat:
Zitat:
meine 76 scheinen also noch vorhanden zu sein, auch wenn ich das mangels Hexeditorkenntnisse nicht wirklich rückrechnen. Jetzt ist natürlich die Frage wie ich das ganze behoben bekomme. Meine aktuelle Idee wäre (mangels anderer bekannten möglichkeiten) die Datei in ein Memo zu laden und das ganze dann mittels irgendeiner mir momentan unbekannten Delphifunktion zurückzurechnen und wieder zu speichern. |
Re: Indy FTPClient + AS400
machs nicht zu umstaendlich... wir haben es damit in unserer AS400 loesen koennen. Bekommen alles korrekt in textformat. allerdings ohne seperator...
|
Re: Indy FTPClient + AS400
Das Problem ist nicht die Daten leserlich von der AS 400 auf den Rechner zu bekommen, dafür haben wir eine Art Maske im Betrieb die das ganze kann, allerdings ist das etwas aufwenig für die Benutzer zu bedienen. Ich will aktuell ein Programm schreiben (mit Delphi 7) das die selbe Aufgabe erfüllt aber wesentlich einfacher zu handhaben ist. Wenn ich den Text richtig verstanden habe führe ich den Query auf der AS aus. Ich weiss allerdings nicht wie ich die As400 nun von Delphi aus ansteuern kann, ich mache es zwar aktuell mit der Indykomponente, weiss aber nicht ob diese mir die Möglichkeit bietet den Query auszuführen. Ausserdem soll das Programm immer nur einzelne Dateien runterladen, nie den ganzen Server.Des weiteren sollte ich noch erwähnen das ich fast überhaupt keine Kenntnisse von der AS400 habe.
|
Re: Indy FTPClient + AS400
Also wir haben eine query auf der AS400 erstellt, die taeglich einmal laeuft und diese in eine Textdatei ausgibt. Die Textdatei wird mit meinem delphi program per ftp heruntergeladen und dann zeilenweise ausgelesen.
Moechtest du diese daten aus der AS nur lesen, oder auch modifizieren? Es gibt ne delphi componente fuer die AS400 ( ![]() Gruss beber |
Re: Indy FTPClient + AS400
Könnte es am Zeichensatz liegen ? Die AS/400 verwendet noch den EBCDIC Zeichensatz, der muss erstmal konvertiert werden. Das kannst Du mit dieser Unit machen:
Delphi-Quellcode:
Ansonsten empfehle ich Dir Peter Sawatzki's
unit ebcdic;
interface function EBCDICtoASCII(const c: Byte): Byte; procedure SetInvalid(const c: Byte); implementation const InvalidTableEntry: Byte = $1A; Table: array[0..255] of Byte = ($00,$01,$02,$03,$1A,$09,$1A,$7F,$1A,$1A,$1A,$0B,$0C,$0D,$0E,$0F, $10,$11,$12,$13,$1A,$1A,$08,$1A,$18,$19,$1A,$1A,$1C,$1D,$1E,$1F, $1A,$1A,$1A,$1A,$1A,$0A,$17,$1B,$1A,$1A,$1A,$1A,$1A,$05,$06,$07, $1A,$1A,$16,$1A,$1A,$1A,$1A,$04,$1A,$1A,$1A,$1A,$14,$15,$1A,$1A, $20,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$5B,$2E,$3C,$28,$2B,$21, $26,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$5D,$24,$2A,$29,$3B,$5E, $2D,$2F,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$7C,$2C,$25,$5F,$3E,$3F, $1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$60,$3A,$23,$40,$27,$3D,$22, $1A,$61,$62,$63,$64,$65,$66,$67,$68,$69,$1A,$1A,$1A,$1A,$1A,$1A, $1A,$6A,$6B,$6C,$6D,$6E,$6F,$70,$71,$72,$1A,$1A,$1A,$1A,$1A,$1A, $1A,$7E,$73,$74,$75,$76,$77,$78,$79,$7A,$1A,$1A,$1A,$1A,$1A,$1A, $1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A,$1A, $7B,$41,$42,$43,$44,$45,$46,$47,$48,$49,$1A,$1A,$1A,$1A,$1A,$1A, $7D,$4A,$4B,$4C,$4D,$4E,$4F,$50,$51,$52,$1A,$1A,$1A,$1A,$1A,$1A, $5C,$1A,$53,$54,$55,$56,$57,$58,$59,$5A,$1A,$1A,$1A,$1A,$1A,$1A, $30,$31,$32,$33,$34,$35,$36,$37,$38,$39,$1A,$1A,$1A,$1A,$1A,$1A); var Invalid: BYTE; function EBCDICtoASCII(const c: Byte): Byte; begin Result := Table[c]; if Result = InvalidTableEntry Then Result := Invalid; end; procedure SetInvalid(const c: Byte); begin Invalid := c; end; initialization SetInvalid($20); end. ![]() Gruß, Marcel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 04:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz