Delphi-PRAXiS
Seite 3 von 3     123   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi .txt von einem ftp server auslesen (https://www.delphipraxis.net/111428-txt-von-einem-ftp-server-auslesen.html)

5etH 4. Apr 2008 08:30

Re: .txt von einem ftp server auslesen
 
hallo nochmal ... hab noch eine letzte frage :cry:

ich habe jetzt den kundendatensatz ein ein unsichtbares grid gepackt (Stringgrid2) und würde es nun gerne per stream wieder an den server senden, mein problem: wie bekomme ich die datensätze des Grids in den Stream, sodass sie wieder mit , in dem csv getrennt sind.

so weit bin ich schon gekommen:

Delphi-Quellcode:
if (right) then // Right gibt an ob alle felder zur account erstellung ausgefüllt sind
      begin
        for b := 0 to stringgrid1.rowcount - 1 do
          begin
            if (keyganz = stringgrid1.cells[4,i]) and (Stringgrid1.Cells[5,i] = '0') then
            //wenn Key in datenbank und noch nicht benuzt
              begin
                 //Einloggen
                 datenmodul1.idftp1.Username := 'proguser';
                 datenmodul1.idftp1.Password := 'manuel13';
                 datenmodul1.idftp1.Host := '10.15.121.106';
                 datenmodul1.idftp1.Connect;

                 //Lokale Tabellen
                 stringgrid1.Cells[5,i] := '1';
                 Stringgrid2.Cells[1,stringgrid2.rowcount] := edit4.text;
                 Stringgrid2.Cells[2,stringgrid2.rowcount] := edit5.text;
                 Stringgrid2.Cells[2,stringgrid2.rowcount] := keyganz;
                 stringgrid2.RowCount := Stringgrid2.rowcount +1;


                  save := TMemoryStream.create;
                  csv2 := TStringList.create;
                  save.position:=0;

                  for x := 0 to Stringgrid2.rowcount - 1 do
                    begin
                       //Inahlt fehlt <-- wie sieht der schleifen inhalt zum speichern aus
                    end;
                  csv2.savetoStream(save);
                  csv2.free;
                  save.Free;


                 //Auf server Speichern und disconnecten
                 datenmodul1.IdFTP1.ChangeDir('/Kunden/');
                 datenmodul1.IdFTP1.Put(save,ExtractFileName('Kundendatenbank.csv'));
                 datenmodul1.IdFTP1.Disconnect;

              end;
          end;

      end;

Klaus01 4. Apr 2008 08:39

Re: .txt von einem ftp server auslesen
 
Delphi-Quellcode:
var
  csv : TStringList;
begin
  csv := TstringList.create;
  csv.Delimiter:=',';
  for i:=0 to StringGrid1.RowCount -1 do
    begin
      StringGrid1.Rows[i].Delimiter:=',';
      csv.Add(StringGrid1.Rows[i].CommaText)
    end;
  csv.SaveToStream(<Stream>);
  csv.Free;
end;
War aber so ähnlich schon in diesem Thread aufgeführt.

Grüße
Klaus

5etH 4. Apr 2008 09:29

Re: .txt von einem ftp server auslesen
 
holla que tall ^^

also erst lief es ... jetzt tritt ein fehler auf (Listenindex überschreitet das Maximum(0)) woran kann das liegen?

hier einmal der code und wo der fehler auftritt

Delphi-Quellcode:
        begin
          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/KundenDatenbank.csv', Kundenstream);

         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]; //Hier stürzt er ab !
         end;
        csv.free;
        kundenStream.Free;
        right := true;

Klaus01 4. Apr 2008 09:33

Re: .txt von einem ftp server auslesen
 
Delphi-Quellcode:
   
  Kundenstream.position:=0;
  csv.loadfromStream(Kundenstream);
Vertausche mal diese beiden Zeilen.

Grüße
Klaus

5etH 4. Apr 2008 10:02

Re: .txt von einem ftp server auslesen
 
ist vertauscht aber selber fehler :(

Klaus01 4. Apr 2008 10:06

Re: .txt von einem ftp server auslesen
 
Kannst Du Deine Datei mal testweise in ein Memo ausgeben?
Memo1.lines.loadFromFile() und den output hier einstellen.

Testen kann ich das erst heute abend wieder.

Grüße
Klaus

5etH 4. Apr 2008 10:23

Re: .txt von einem ftp server auslesen
 
also ich habe den stream der übergeben wird jetzt mal ausgesleen und der ist leer

Delphi-Quellcode:
Memo1.lines.LoadFromStream(kundenstream);
aber die datei auf dem server hat den inhalt

KundenNr.,Name,Vorname,Email,Key,Regestriert
1,1,1,1,7453343257-7456326365-5637645445,0
2,2,2,2,7673325253-7272764327-3677447245,0

und er lädt die datei auch vom server wenn ich da in die Log schaue

[Edit] je nach dem wie ich i in der folgenden schleife erhöhe ändert sich der maximal listindex

Delphi-Quellcode:
for i:=0 to csv.count -1 do
        begin
         StringGrid1.Rows[i].Delimiter:=',';
         StringGrid1.Rows[i].Commatext:=csv[i];
        end;

5etH 4. Apr 2008 11:37

Re: .txt von einem ftp server auslesen
 
hatte das memo1... an der falschen stelle und jetzt lädt er es in das memofeld

inhalt:

KundenNr.,Name,Vorname,Email,Key,Regestriert
1,1,1,1,7453343257-7456326365-5637645445,0
2,2,2,2,7673325253-7272764327-3677447245,0

aber er trägt es nicht in das grid ein... immernoch selber fehler

Klaus01 4. Apr 2008 15:48

Re: .txt von einem ftp server auslesen
 
Hallo Manuel,

ich habe das noch einmal getestet.
Ich bekomme nur den Fehler "Listindex out of Bounds" wenn
ich den Stream, nachdem er geladen wurde, nicht auf den Anfang
(kundenStream.position:=0;) zurückgesetzt habe.

Anbei noch einmal beide Routinen zum down- und upload.

Delphi-Quellcode:
procedure TForm1.downloadButtonClick(Sender: TObject);
var
  kundenStream : TMemoryStream;
  csv : TStringList;
  i: Byte;
begin
  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;
  if csv.count > 0 then
    for i:=0 to csv.count -1 do
      begin
        StringGrid1.Rows[i].Delimiter:=',';
        StringGrid1.Rows[i].Commatext:=csv[i];
      end;

  csv.free;
  kundenStream.Free;

end;

procedure TForm1.uploadButtonClick(Sender: TObject);
var
  kundenStream: TMemoryStream;
  csv : TStringList;
  i: Byte;
begin
  kundenStream := TMemoryStream.Create;
  idftp1.Host:='192.168.189.128';
  idftp1.Username:='...';
  idftp1.Password:='...';

  idftp1.Disconnect;
  csv := TStringList.create;

    for i:=0 to StringGrid1.Rowcount -1 do
      begin
        csv.Add(StringGrid1.Rows[i].CommaText);
      end;
  idftp1.Connect();
  csv.SaveToStream(kundenStream);
  idftp1.put(kundenStream,'kunden.csv');

  csv.free;
  kundenStream.Free;
  idftp1.disconnect;

end;
Wenn es bei Dir nicht so geht, dann stimmt in Deinem Code irgendetwas nicht.

Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:33 Uhr.
Seite 3 von 3     123   

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