Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Netzwerke (https://www.delphipraxis.net/14-netzwerke/)
-   -   Delphi Indy FTPClient + AS400 (https://www.delphipraxis.net/38362-indy-ftpclient-as400.html)

chuck 18. Jan 2005 09:27


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

phlux 18. Jan 2005 11:22

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?

beber 18. Jan 2005 11:54

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.
Google Newsgroup

Gruss
beber

chuck 18. Jan 2005 11:59

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:

76,000
der Inhalt der Datei
Zitat:

` 
und im Hexeditor
Zitat:

0000 0000 0007 6000 OF ......'..

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.

beber 18. Jan 2005 12:03

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...

chuck 18. Jan 2005 12:29

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.

beber 18. Jan 2005 12:55

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 (unter downloads findbar) die recht nett ist. Da kannst du dann auch modifizieren.
Gruss
beber

Marcel Gascoyne 18. Jan 2005 12:57

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:
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.
Ansonsten empfehle ich Dir Peter Sawatzki's AS/400 dbExpress Komponenten. Damit kannst Du direkt auf die DB2/400 Datenbank zugreifen.

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