![]() |
Re: .txt von einem ftp server auslesen
Wie schaut denn Deine Datei aus?
Ist es ein csv Text? Grüße Klaus |
Re: .txt von einem ftp server auslesen
das ist eine datei in der die datensätze sequentiell abgespeichert werden
Beispiel: 6 <- colcount 3 <- rowcount KundenNr 1 2 Name müller fischer Vorname peter hans test1@test.de test2@test.de Key 5673325273-7456766323-7433227665 5437767477-3652344723-5633225447 Regestriert 0 0 |
Re: .txt von einem ftp server auslesen
Code:
Ich würde vorschlagen die Datei etwas anders zu gestalten:
6 <- colcount
3 <- rowcount KundenNr 1 2 Name müller fischer Vorname peter hans [email]test1@test.de[/email] [email]test2@test.de[/email] Key 5673325273-7456766323-7433227665 5437767477-3652344723-5633225447 Regestriert 0 0 1. Zeile KundenNr;Name;Vorname;Email;Key;Registriert 2. Zeile 1;müller;peter;test1@test.de;56...;0 ... Dann fällt die Sache mit dem Einlesen deutlich leichter: Ein StringGrid In ein csv Format zu speichern geht so:
Delphi-Quellcode:
Ein Import sollte so gehen:
var
csv : TStringList; begin csv := TstringList.create; csv.Delimiter:=';'; for i:=0 to StringGrid1.RowCount -1 do begin StringGrid1.Rows[i].Delimiter:=';'; csv.Add(StringReplace(StringGrid1.Rows[i].CommaText,',',';',[rfReplaceAll])); end; csv.SaveToFile(<FileName>); csv.Free; end;
Delphi-Quellcode:
Grüße
var
csv : TStringList; begin csv := TStringList.create; csv.loadfromStream(DB); stringGrid1.rowCount := sl.count; for i:=0 to sl.count -1 do begin StringGrid1.Rows[i].Delimiter:=';'; StringGrid1.Rows[i].Commatext:=sl[i]; end; csv.free; end; Klaus |
Re: .txt von einem ftp server auslesen
das funktioniert an sich schonmal... Danke.... nur habe ich das Problem das ich es auf zwei arten laden und speichern muss.
einmal in einem Stream damit die kunden nicht rankommen. zum administrieren der Accounts arbeiten wir mit der selben DB, die aber teils Lokal gepsiechert werden muss. sprich ich bräuchte dann auch eine procedure um das lokal speichern und laden zu können. du musst sie nicht für mich schreiben, aber kann ja sein du hast schon eine ... asl omein lokaler ladeaufruf sieht jetzt so aus aber er meckert noch mit dem count
Delphi-Quellcode:
procedure loadgrid(StringGrid: TStringGrid; const FileName: TFileName);
var csv : TStringList; i : Integer; begin csv := TStringList.create; csv.loadfromfile('c:\DB\DB.txt'); stringGrid.rowCount := csv.count; for i:=0 to csv.count -1 do begin StringGrid.Rows[i].Delimiter:=';'; StringGrid.Rows[i].Commatext:=csv[i]; csv.free; end; end; |
Re: .txt von einem ftp server auslesen
Hä? Wie du speicherst und lädst hat doch Klaus gezeigt?
Und außerdem: Wie wäre es, wenn du mal eine richtige (Embedded-)Datenbank benutzt, statt solche selbstgebastelten Text-Dateien "DB" zu nennen und in einem Atemzug auch noch von "Sicherheit" zu sprechen? [edit] stringGrid.rowCount := tstringlist.count;//Auf Hirn einschalten? Du definierst "csv" als TStringList, erzeugst es auch so, lädst die Datei auch so ... aber dann willste aufeinmal von der Klassendeklaration auf .Count zugreifen ... Allet klar. ;) [/edit] |
Re: .txt von einem ftp server auslesen
das mit dem csv ist mir eben auch aufgefallen ^^ ich seh die letzten tage nur delphicode ^^ kann verwirren
zum andern sie ist noch in der testphase und heist nur db weils sich schneller schreiben lässt.... an klasu nochmal vielen dank problem ist gelöst und es funktioniert alles |
Re: .txt von einem ftp server auslesen
so nochmal zum eigentlich stream in stringgrid lesen ...
mein aufruf sieht so aus
Delphi-Quellcode:
doch leider lädt er die Datensätze nicht in das Grid ein es bleibt leer... er verändert etwas, (Die fixed Cols verschwinden der fixed Row bleibt) aber es wird kein text eingefügt die quelldatei ist aber richtig
var
DB : TMemoryStream; csv : TStringList; i : Integer; begin DB := TMemoryStream.create; datenmodul1.idftp1.Username := 'proguser'; datenmodul1.idftp1.Password := 'manuel13'; datenmodul1.idftp1.Host := '10.15.121.106'; datenmodul1.idftp1.Connect; datenmodul1.IdFTP1.ChangeDir('/Kunden/'); datenmodul1.idftp1.Get('/Kunden/DB2.txt', DB); csv := TStringList.create; csv.loadfromStream(DB); stringGrid1.rowCount := csv.count; for i:=0 to csv.count -1 do begin StringGrid1.Rows[i].Delimiter:=';'; StringGrid1.Rows[i].Commatext:=csv[i]; end; csv.free; [EDIT] Beim lokalen speicher geht alles klar nur wenn ich lokal laden will sagt er mir das: Listenindex überschreitet das Maximum (1) wie kann ich das beheben und hängt es vill mit dem oben genannten zusammen ? |
Re: .txt von einem ftp server auslesen
Kann es sein, dass Dein Stream leer ist?
Delphi-Quellcode:
Oder setze mal nachdem der Stream geladen wurde die Position des Streams auf 0.
datenmodul1.IdFTP1.ChangeDir('/Kunden/');
datenmodul1.idftp1.Get('/Kunden/DB2.txt', DB);
Delphi-Quellcode:
Grüße
DB.position:=0;
Klaus |
Re: .txt von einem ftp server auslesen
also das zurücksetzten ist sinnlos und ich denke nicht das DB leer ist da er sich ja die datei zieht und auch im debugger kein "()" angezeigt wird ...
|
Re: .txt von einem ftp server auslesen
Delphi-Quellcode:
So, der obige Code funktioniert bei mir.
var
kundenStream : TMemoryStream; csv : TStringList; i: Byte; begin edit1.Text:= idftp1.Version; kundenStream := TMemoryStream.Create; idftp1.Host:='192.168.189.128'; idftp1.Username:='...'; idftp1.Password:='...'; idftp1.Connect(); idftp1.Get('kunden.csv',kundenStream); idftp1.Disconnect; csv := TStringList.create; kundenStream.Position:=0; csv.loadfromStream(kundenStream); stringGrid1.rowCount := csv.count; for i:=0 to csv.count -1 do begin StringGrid1.Rows[i].Delimiter:=','; StringGrid1.Rows[i].Commatext:=csv[i]; end; csv.free; kundenStream.Free; Wenn der Stream nicht auf die Position 0 gesetzt wird, gibt es eine ListIndex out of bounds Fehlermeldung. Was ich weiter noch festgestellt habe, ist dass wenn die Datensätze mit ; getrennt und aus dem Stream gelesen werden sind diese nicht richtig in das StringGrid eingelesen worden. Es stehen alle Daten in Spalte 0 des StringGrids. Werden die Datensätze mit , getrennt werden sie auch richtig in das StringGrid aufgenommen. Ich habe mit diesen Datensätzen getestet:
Code:
Grüße
KundenNr,Name,Vorname,Email
1,Beck,Rufus,test1@123.com 2,Maier,Dieter,test2@456.net Klaus |
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:12 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