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 Textdatei in Liste laden (https://www.delphipraxis.net/139972-textdatei-liste-laden.html)

DeddyH 9. Sep 2009 14:24

Re: Textdatei in Liste laden
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  aRec: TFahrzeugdaten;
  pAuto: IAuto;
begin
  if OpenDialog1.Execute then
    begin //<-- wichtig! 
      AssignFile(MyFile, OpenDialog1.FileName);
      Reset(MyFile);
      while not EOF(MyFile) do
        begin
          read(MyFile, aRec);
          pAuto := TBackupClassesFactory.Auto;
          pAuto.PS := aRec.ps;
          pAuto.KW := aRec.kw;
          pAuto.Name := aRec.fahrzeugName;
        end;
      CloseFile(MyFile); //<-- nicht vergessen
    end; //s.o.
end;

Schnittcher 9. Sep 2009 15:30

Re: Textdatei in Liste laden
 
Hallo,

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Auto: IAuto;
  datensatz: TFahrzeugdaten;
  MyFile: file of TFahrzeugdaten;
begin
  Auto := TBackupClassesFactory.Auto;
  AutoList := TbackupClassesFactory.AutoList;
  if OpenDialog1.Execute then
  begin
    AssignFile(MyFile, OpenDialog1.FileName);
    Reset(MyFile);
    while not EOF(MyFile) do
    begin
      read(MyFile, datensatz);
      Auto.PS := datensatz.ps;
      Auto.KW := datensatz.kw;
      Auto.Name := datensatz.fahrzeugName;
        //  [DCC Warning] Unit1.pas(135): W1057 Implicit string cast from 'ShortString' to 'string'
      Auto.kmh := 0;
      Auto.mph := 0;
      AutoList.add(Auto);
      lbEintraege.Caption := IntToStr(AutoList.Count);
    end;
    CloseFile(MyFile);
  end;
end;
Mir wird jetzt immer der gleiche Eintrag angezeigt.
Kann jemand einen Fehler finden.

Gruß,
Schnittcher

Klaus01 9. Sep 2009 16:13

Re: Textdatei in Liste laden
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Auto: IAuto;
  datensatz: TFahrzeugdaten;
  MyFile: file of TFahrzeugdaten;
begin
  Auto := TBackupClassesFactory.Auto;
  AutoList := TbackupClassesFactory.AutoList;
  if OpenDialog1.Execute then
  begin
    AssignFile(MyFile, OpenDialog1.FileName);
    Reset(MyFile);
    while not EOF(MyFile) do   // <-- hier mal einen Breakpoint setzen und mit F8 schrittweise den Code abarbeiten
    begin
      read(MyFile, datensatz);
      Auto.PS := datensatz.ps; // Datensatz.ps markieren und Ctrl+F5 drücken
      Auto.KW := datensatz.kw; // Datensatz.kw markieren und Ctrl+F5 drücken
      Auto.Name := datensatz.fahrzeugName; // Datensatz.fahrzeugName markieren und Ctrl+F5 drücken
      Auto.kmh := 0;
      Auto.mph := 0;
      AutoList.add(Auto);
      lbEintraege.Caption := IntToStr(AutoList.Count);
    end;
    CloseFile(MyFile);
  end;
end;

Mit ctrl+F5 kannst Du dir Variablen in der Watchlist anschauen
ändern sich da die Werte?
Zählt AutoList.count hoch?

Sind in der Datei auch unterschiedliche Werte gespeichert?

Grüße
Klaus

Der.Kaktus 9. Sep 2009 16:20

Re: Textdatei in Liste laden
 
Zitat:

Zitat von DeddyH
Ich bin im Moment krank geschrieben, von daher hab ich jede Menge Zeit ;)

Gute Besserung
:cheers: ..war ich auch letzten 2 Wochen ;-)

DeddyH 9. Sep 2009 16:23

Re: Textdatei in Liste laden
 
Danke, Kaki :cheers:

Schnittcher 10. Sep 2009 07:35

Re: Textdatei in Liste laden
 
Hallo,

ja die Werte ändern sich, dass hätte ich vielleicht auch schreiben sollen.

Die Anzahl der Einträge geht auch nach oben.

Was könnte es sein?

Gruß,
Schnittcher

Klaus01 10. Sep 2009 08:17

Re: Textdatei in Liste laden
 
Guten Morgen Schnittcher,

ich würde eigentlich erwarten, das pro eingelesen Datensatz auch
ein Object/Interface vom Typ Auto generiert wird.

nun weiß ich leider nicht was diese Zeilen machen:
Delphi-Quellcode:
 
  Auto := TBackupClassesFactory.Auto;
  AutoList := TbackupClassesFactory.AutoList;
Wird da ein "Auto" angelegt?
Wird da eine leere AutoList angelegt?

Wenn das nun alles mit "normalen" Objecten laufe würde,
würde ich es so machen:

Delphi-Quellcode:

type
  TAuto = class(TObject)
   ...
  end;

  TAutoList = class(TObjectList);
  ...
  end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Auto: TAuto;
  datensatz: TFahrzeugdaten;
  MyFile: file of TFahrzeugdaten;
begin
  //Auto := TBackupClassesFactory.Auto;
  AutoList := TAutoList.create(true);      // eine leere Liste erstellen
  if OpenDialog1.Execute then
  begin
    AssignFile(MyFile, OpenDialog1.FileName);
    Reset(MyFile);
    while not EOF(MyFile) do   // <-- hier mal einen Breakpoint setzen und mit F8 schrittweise den Code abarbeiten
    begin
      read(MyFile, datensatz);
      Auto : TAuto.create;          // neue Autoinstanz erstellen
      Auto.PS := datensatz.ps;
      Auto.KW := datensatz.kw;
      Auto.Name := datensatz.fahrzeugName;
      Auto.kmh := 0;
      Auto.mph := 0;
      AutoList.add(Auto); // Der Liste hinzufügen
      lbEintraege.Caption := IntToStr(AutoList.Count);
    end;
    CloseFile(MyFile);
  end;
end;

Mit Interfaces habe ich mich bisher noch nicht beschäftigt
aber ich denke das es eigentlich da ähnlich sein sollte.

Grüße
Kalus

Grüße
Klaus

Schnittcher 10. Sep 2009 08:20

Re: Textdatei in Liste laden
 
Hallo Klaus,

ich möchte mich jetzt erstmal dafür bedanken das du die die Zeit nimmst mir zu helfen, ich möchte auch DeddyH danken, der mir gestern noch sehr lange per PN und im Chat geholfen hat.

Delphi-Quellcode:
Auto := TBackupClassesFactory.Auto;
  AutoList := TbackupClassesFactory.AutoList;
da steht das hier hinter:

Delphi-Quellcode:
class function TBackupClassesFactory.AutoList: IAutoList;
begin
  Result := TautoList.Create;
end;

class function TBackupClassesFactory.Auto: IAuto;
begin
  Result := TAuto.Create;
end;
also die Liste und das Auto werden erstellt.

Gruß,
Schnittcher

Klaus01 10. Sep 2009 08:24

Re: Textdatei in Liste laden
 
Zitat:

Zitat von Schnittcher
Delphi-Quellcode:
class function TBackupClassesFactory.Auto: IAuto;
begin
  Result := TAuto.Create;
end;
also die Liste und das Auto werden erstellt.

Gruß,
Schnittcher

es wird aber nur ein Auto erstellt.

Du musst pro gelesenen "Datensatz" ein Auto generieren,
ansonsten verweisen Deine Instanzen in der Liste alle
auf die gleiche Instanz und alle Werte Deiner Liste
haben die Werte des zuletzt gelesenen Datensatzes.

Grüße
Klaus

Schnittcher 10. Sep 2009 08:26

Re: Textdatei in Liste laden
 
Hallo,

kannst du mal kurz in den Chat kommen?

Gruß,
Schnittcher


Alle Zeitangaben in WEZ +1. Es ist jetzt 01:07 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