Delphi-PRAXiS
Seite 2 von 3     12 3      

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)

Schnittcher 9. Sep 2009 13:36

Re: Textdatei in Liste laden
 
Hallo,

wenn du die Zeit dazu hast das hier:


Zitat:

Zitat von DeddyH
Allerdings wäre es IMHO einfacher, typisierte Dateien statt Textdateien zu verwenden, das spart die ganze Stringfrickelei samt Konvertierung.

Gruß,
Schnittcher

Klaus01 9. Sep 2009 13:46

Re: Textdatei in Liste laden
 
Delphi-Quellcode:

// einen Record (datensatz) Type angelegt
// ein Record ist eine Datenstruktur (ein Zusammenschluß von Daten)
type
  TFahrzeugdaten = packed record
    fahrzeugName : String[50];
    kw  : single;
    ps  : single;
  end;
Delphi-Quellcode:
procedure TForm1.cmdListSpeichernClick(Sender: TObject);
var
  i: integer;
  pAuto: IAuto;
  myfile: File of TFahrzeugdaten; // ein Dateivariable deklariert
  datenSatz : TFahrzeugdaten;     // eine Variable zur Aufnahme der Daten deklariert
 
begin
  try
    if AutoList = nil then
      raise
        EBerechnung.Create('Wenn es keine Liste gibt, kann man sie auch nicht speichern.');
    if SaveDialog1.Execute then
      AssignFile(myFile, SaveDialog1.FileName);
    Rewrite(myFile);
    for i := 0 to AutoList.Count - 1 do
    begin
      pAuto := AutoList.Items[i];
      // zuweisen der Daten
      datensatz.fahrzeugName := pAuto.ErgebnisName;
      datensatz.kw := pAuto.ErgebnisKW;
      datensatz.ps := pAuto.ErgebnisPS;
      // Daten in die Datei schreiben
      Write(myfile,datensatz);
    end;
    CloseFile(myFile);
  except
    on E: EBerechnung do
      MessageDlg(E.Message, mtInformation, [mbOK], -1);
  end;
end;
Für zum Speichern sollte es ungefähr wie oben beschrieben aussehen.

Grüße
Klaus

Schnittcher 9. Sep 2009 13:48

Re: Textdatei in Liste laden
 
Hallo,

erstmal danke für die Umstellung meines Codes.
Aber könntest du mir auch noch erklären was du da jetzt getan hast?

Wenn ich das richtig verstehe hast du alles in ein "Paket" gespeichert.
Dann kann ich das also auch so wieder ausgeben?

Gruß,
Schnittcher

DeddyH 9. Sep 2009 13:48

Re: Textdatei in Liste laden
 
Ich bin im Moment krank geschrieben, von daher hab ich jede Menge Zeit ;)
Also: wie der Name schon sagt, besteht eine typisierte Datei aus Datensätzen eines bestimmten Typs. Dieser ist im Normalfall als Record definiert. Beispiel:
Delphi-Quellcode:
type
  TMyRec = record
    Name: shortstring; //NICHT string, da sonst nur der Zeiger gespeichert würde
    Nummer: integer;
    ZahlmitKomma: double;
  end;

...

var MyFile: file of TMyRec; //file of Datentyp --> typisierte Datei
Will man nun z.B. ein Array of TMyRec abspeichern, kann man das so machen (Fehlerbehandlung mal außen vor gelassen):
Delphi-Quellcode:
AssignFile(MyFile,Dateiname);
//Datei überschreiben
Rewrite(MyFile);
//Jeden einzelnen Datensatz in Datei schreiben
for i := Low(MyRecArray) to High(MyRecArray) do
  write(MyFile,MyRecArray[i]);
CloseFile(MyFile);
Andersherum (Einlesen):
Delphi-Quellcode:
AssignFile(MyFile,Dateiname);
Reset(MyFile);
//Anzahl der Datensätze ermitteln und Arraygröße entsprechend setzen
SetLength(MyRecArray, FileSize(MyFile));
i := 0;
while not EOF(MyFile) do
  begin
    //aktuellen Datensatz einlesen
    read(MyFile,MyRecArray[i]);
    //Array-Index erhöhen
    inc(i);
  end;
CloseFile(MyFile);
Das war jetzt alles aus dem Kopf getippt, muss daher nicht unbedingt so funktionieren, aber ich hoffe, Du hast das Prinzip verstanden. AFAIK gibt es dazu auch ein Tutorial hier in der DP, wo Du noch einmal genauer nachlesen kannst.

Schnittcher 9. Sep 2009 13:50

Re: Textdatei in Liste laden
 
Hallo,

danke für die Antwort.

Könntest du vll. mal kurz in den Chat kommen?

Gruß,
Schnittcher

Klaus01 9. Sep 2009 13:58

Re: Textdatei in Liste laden
 
Zitat:

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

Gute Besserung

Grüße
Klaus

DeddyH 9. Sep 2009 14:07

Re: Textdatei in Liste laden
 
Danke Dir.

Schnittcher 9. Sep 2009 14:18

Re: Textdatei in Liste laden
 
Hallo,

so von mir auch noch gute Besserung.

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  aRec: TFahrzeugdaten;
  pAuto: IAuto;
begin
    if OpenDialog1.Execute then
    AssignFile(MyFile, OpenDialog1.FileName);
  Reset(MyFile);
//Anzahl der Datensätze ermitteln und Arraygröße entsprechend setzen
  i := 0;
  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;

end;
Er schreibt beim öffnen nichts in meine Liste.

Gruß,
Schnittcher

jfheins 9. Sep 2009 14:23

Re: Textdatei in Liste laden
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  aRec: TFahrzeugdaten;
  pAuto: IAuto;
begin
    if OpenDialog1.Execute then
        AssignFile(MyFile, OpenDialog1.FileName); // Diese Zeile Code nur Ausführen,
                                                  //wenn im Dialog "OK" geklickt wurde

// Folgendes immer ausführen
  Reset(MyFile);
//Anzahl der Datensätze ermitteln und Arraygröße entsprechend setzen
  i := 0;
  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;

end;
Fällt dir was auf?

Klaus01 9. Sep 2009 14:23

Re: Textdatei in Liste laden
 
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  i: integer;
  aRec: TFahrzeugdaten;
  pAuto: IAuto;
begin
    if OpenDialog1.Execute then
    AssignFile(MyFile, OpenDialog1.FileName);
  Reset(MyFile);
//Anzahl der Datensätze ermitteln und Arraygröße entsprechend setzen
  i := 0;
  while not EOF(MyFile) do
  begin
    read(MyFile, aRec);
    //pAuto := IAuto.create; // keine Ahnung ob das bei Interfaces so geht
    pAuto := TBackupClassesFactory.Auto; // ist das sowas wie create?
    pAuto.PS := aRec.ps;
    pAuto.KW := aRec.kw;
    pAuto.Name := aRec.fahrzeugName;
    autoList.items.add(pAuto); // Object in die Liste einfügen
  end;

end;
Grüße
Klaus


Alle Zeitangaben in WEZ +1. Es ist jetzt 10:51 Uhr.
Seite 2 von 3     12 3      

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