AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

LoadFromFile

Ein Thema von Schnittcher · begonnen am 11. Sep 2009 · letzter Beitrag vom 14. Sep 2009
Antwort Antwort
Seite 2 von 3     12 3      
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#11

Re: LoadFromFile

  Alt 11. Sep 2009, 14:22
Zitat:
Beim Laden sollen die Daten der Datei in eine Liste eingetragen werden.
Aber es wird nie was eingetragen.
Er geht immer gleich zu CloseFile.
.. nun, das verstehe sogar ich.

Delphi-Quellcode:
procedure TAutoList.LoadFromFile(const FileName: string);
var
  datensatz: TFahrzeugdaten;
  MyFile: file of TFahrzeugdaten;
  Auto: IAuto;
begin
  begin
    AssignFile(MyFile, FileName);
    try
      Reset(MyFile);
          ShowMessage(inttostr(FileSize(MyFile)));
     Seek(MyFile,0); // hilft das?
      while not EOF(MyFile) do
      begin
        Auto := TBackupClassesFactory.Auto;
        read(MyFile, datensatz);
        Auto.SetValue(floattostr(datensatz.kw),avps);
// Auto.ps := datensatz.ps;
// Auto.KW := datensatz.kw;
// Auto.Name := datensatz.fahrzeugName;
// Auto.kmh := 0;
// Auto.mph := 0;
        add(Auto);
        Count;
      end;
    finally
      CloseFile(MyFile);
    end;
  end;
end;
end.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#12

Re: LoadFromFile

  Alt 11. Sep 2009, 14:23
Hallo,

was heißt denn:

Seek(MyFile,0); ???

Es läd die Datei ja nicht in die Variable.

Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#13

Re: LoadFromFile

  Alt 11. Sep 2009, 14:25
Zitat von Schnittcher:
Hallo,

was heißt denn:

Seek(MyFile,0); ???

Es läd die Datei ja nicht in die Variable.

Gruß,
Schnittcher
Der einfachste Weg das herauszufinden ist ,mit der Maus
auf die Routine zu gehen einmal klicken und dann F1 drücken.

Aus der Hilfe:
Zitat:
Unit
System

Syntax


[Delphi] procedure Seek(var F: file; N: Integer);


Description
Use Seek in Delphi code to move to a specified position in open typed or untyped files. The current file position of F moves to component number N, where the number of the first component of a file is 0.

In the above syntax, F is a typed or untyped file variable. The file specified by F must be open. N is an expression of type Longint

To expand a file, seek one component beyond the last component; that is, the statement Seek(F, FileSize(F)) moves the current file position to the end of the file.
Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#14

Re: LoadFromFile

  Alt 11. Sep 2009, 14:28
Hallo,

das ganze Hilft mir auch nicht weiter.

Das Programm springt gleich von

 while not EOF(MyFile) do zu

Delphi-Quellcode:
    finally
      CloseFile(MyFile);
Gruß,
Schnittcher
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#15

Re: LoadFromFile

  Alt 11. Sep 2009, 14:32
Hallo,

mach mal bitte folgende Änderungen in deinen Code:
Delphi-Quellcode:
{$I+} // Expcetion werfen, wenn Fehler bei Reset... auftreten.
procedure TAutoList.LoadFromFile(const FileName: string);
var
  datensatz: TFahrzeugdaten;
  MyFile: file of TFahrzeugdaten;
  Auto: IAuto;
begin
  begin
    // erstmal prüfen, ob's die Datei tatsächlich gibt, wenn nicht liegt der Hund woanders begraben.
    if not FileExists(FileName) then begin
      ShowMEssage('Uups: Die Datei ' + FileName + ' gibt es ja garnicht.');
      Exit;
    end;
    ShowMessage(FileName); // Wir wollen wissen, ob es der von uns erwartete Dateiname ist.
    AssignFile(MyFile, FileName);
    try
      try // Einen zusätzlichen Try-Except-Block, damit wir Fehler abfangen können.
        Reset(MyFile);
        // Wie groß ist die Datei?
        // Hier wird angegeben, wieviele Sätze vom Typ TFahrzeugdaten in der Datei sind.
        // Hier wird nicht angegeben, wie groß die Datei in Byte ist!!!
        ShowMessage(inttostr(FileSize(MyFile)));
        If EoF(MyFile) then begin
          ShowMessage('EoF(MyFile) ist der Meinung, dass keine Fahrzeugdaten in der Datei sind.');
          Exit;
        end;
        while not EOF(MyFile) do
        begin
          Auto := TBackupClassesFactory.Auto;
          read(MyFile, datensatz);
          Auto.SetValue(floattostr(datensatz.kw),avps);
// Auto.ps := datensatz.ps;
// Auto.KW := datensatz.kw;
// Auto.Name := datensatz.fahrzeugName;
// Auto.kmh := 0;
// Auto.mph := 0;
          add(Auto);
          Count;
        end;
      except
        // Wenn's irgendwo kracht, wollen wir wissen was passiert ist.
        on e : Exception do
        begin
          ShowMessage(e.Message);
        end;
    finally
      CloseFile(MyFile);
    end;
  end;
end;
end.
und erzähl' uns dann für jedes ShowMessage, was da ausgegeben wird und ob das, was da ausgegeben wird mit deinen Erwartungen übereinstimmt.

Wenn FileSize 0 liefert, dann liegt die Vermutung nahe, dass die Daten in der Datei nicht zum TFahrzeugdaten passen, dann prüfe bitte, ob die Typedefinition mit den Daten übereinstimmt.
  Mit Zitat antworten Zitat
Klaus01

Registriert seit: 30. Nov 2005
Ort: München
5.757 Beiträge
 
Delphi 10.4 Sydney
 
#16

Re: LoadFromFile

  Alt 11. Sep 2009, 14:37
Die Routine sollte aber nur aus der While Schleife herausspringen
wenn das Dateiende erreicht worden ist.
Und das eof fehlerhaft arbeitet kann ich mir kaum vorstellen.

Kann es sein, dass das File auf irgendeine Weise zerschossen wurde?

Tritt das Problem schon immer auf, oder erst seit kurzem?

Grüße
Klaus
Klaus
  Mit Zitat antworten Zitat
Schnittcher

Registriert seit: 25. Aug 2009
Ort: Blomberg
120 Beiträge
 
#17

Re: LoadFromFile

  Alt 11. Sep 2009, 14:41
Hallo,

ich habe es schon mit mehreren Dateien versucht.

@nahpets

Meldungen:

1. Dateiname (mit Pfad),
2. 0
3. Keine Daten vorhanden. (Das wusste ich schon das er das denkt.)

Also ist vll. beim speichern ein Fehler?

So speicher ich die Dateien:

Delphi-Quellcode:
procedure TAutoList.SaveToFile(const FileName: string);
var
  Datei: file of TFahrzeugdaten;
  i: integer;
  datensatz: TFahrzeugdaten;
  Auto: IAuto;
begin
  AssignFile(Datei, Filename);
  Rewrite(Datei);
  try
    for i := 0 to Count - 1 do
    begin
      Auto := Items[i];
      datensatz.fahrzeugName := Auto.ErgebnisName;
      datensatz.kw := Auto.kw;
      datensatz.ps := Auto.ps;
      write(Datei, datensatz);
    end;
  finally
    CloseFile(Datei);
  end;
end;
Gruß,
Schnittcher
  Mit Zitat antworten Zitat
Medium

Registriert seit: 23. Jan 2008
3.679 Beiträge
 
Delphi 2007 Enterprise
 
#18

Re: LoadFromFile

  Alt 11. Sep 2009, 14:49
Lad die betreffende Datei doch am besten mal hier hoch. Weil wenn FileSize 0 liefert, dürfte eigentlich genau nichts in der Datei stehen. Könnte es evtl. sein, dass du die Datei woanders hin speicherst als von wo du sie versuchst zu öffnen? Nicht dass du korrekt irgendwo hin speicherst, aber versuchst eine leere Datei von ganz wo anders zu öffnen und dich wunderst. Kann ja schnell mal passieren wenn man in sehr ähnlich benannten Unterverzeichnissen arbeitet.
"When one person suffers from a delusion, it is called insanity. When a million people suffer from a delusion, it is called religion." (Richard Dawkins)
  Mit Zitat antworten Zitat
nahpets
(Gast)

n/a Beiträge
 
#19

Re: LoadFromFile

  Alt 11. Sep 2009, 14:50
Hallo,

ergänze bitte mal die Speichermethode um:
Delphi-Quellcode:
AssignFile(MyFile, FileName);
try
  try // Einen zusätzlichen Try-Except-Block, damit wir Fehler abfangen können.
    Reset(MyFile);
    // Wie groß ist die Datei?
    // Hier wird angegeben, wieviele Sätze vom Typ TFahrzeugdaten in der Datei sind.
    // Hier wird nicht angegeben, wie groß die Datei in Byte ist!!!
    ShowMessage(inttostr(FileSize(MyFile)));
  except
    on e : Exception do ShowMessage(e.Message);
  end;
  finally
    CloseFile(Datei);
  end;
end;
Kommt da eine Exception oder ist FileSize = 0? FileSize müsste eigentlich Count sein, ist dem nicht so, dann passt das Schreiben in die Datei irgendwie nicht zum Typ TFahrzeugdaten.

Wenn möglich, zeig' uns mal die Definition von TFahrzeugdaten und den Inhalt der von Dir geschriebenen Datei, eventuell können wir ja daran was erkennen.
  Mit Zitat antworten Zitat
QuickAndDirty

Registriert seit: 13. Jan 2004
Ort: Hamm(Westf)
1.889 Beiträge
 
Delphi 12 Athens
 
#20

Re: LoadFromFile

  Alt 11. Sep 2009, 15:15
Bitte einmal
{$I+} Direkt als erstes in die Prozedur schrieben.


EDIT:

und versuche mal am Anfang der Prozedur
FileMode := 0; und am ende, in einem Finaly block
FileMode := 2;
Andreas
Monads? Wtf are Monads?
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 2 von 3     12 3      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 00:24 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz