![]() |
Re: LoadFromFile
Zitat:
Delphi-Quellcode:
Grüße
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. Klaus |
Re: LoadFromFile
Hallo,
was heißt denn:
Delphi-Quellcode:
???
Seek(MyFile,0);
Es läd die Datei ja nicht in die Variable. Gruß, Schnittcher |
Re: LoadFromFile
Zitat:
auf die Routine zu gehen einmal klicken und dann F1 drücken. Aus der Hilfe: Zitat:
Klaus |
Re: LoadFromFile
Hallo,
das ganze Hilft mir auch nicht weiter. Das Programm springt gleich von
Delphi-Quellcode:
zu
while not EOF(MyFile) do
Delphi-Quellcode:
Gruß,
finally
CloseFile(MyFile); Schnittcher |
Re: LoadFromFile
Hallo,
mach mal bitte folgende Änderungen in deinen Code:
Delphi-Quellcode:
und erzähl' uns dann für jedes ShowMessage, was da ausgegeben wird und ob das, was da ausgegeben wird mit deinen Erwartungen übereinstimmt.
{$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. 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. |
Re: LoadFromFile
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 |
Re: LoadFromFile
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:
Gruß,
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; Schnittcher |
Re: LoadFromFile
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.
|
Re: LoadFromFile
Hallo,
ergänze bitte mal die Speichermethode um:
Delphi-Quellcode:
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.
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; 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. |
Re: LoadFromFile
Bitte einmal
Delphi-Quellcode:
Direkt als erstes in die Prozedur schrieben.
{$I+}
EDIT: und versuche mal am Anfang der Prozedur
Delphi-Quellcode:
und am ende, in einem Finaly block
FileMode := 0;
Delphi-Quellcode:
FileMode := 2;
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 23:02 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