![]() |
LoadFromFile
Hallo,
Delphi-Quellcode:
Ich rufe die Prozedur so auf:
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))); 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.
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var // datensatz: TFahrzeugdaten; // MyFile: file of TFahrzeugdaten; begin AutoList := TbackupClassesFactory.AutoList; if OpenDialog1.Execute then begin AutoList.LoadFromFile(OpenDialog1.FileName); end; end;
Delphi-Quellcode:
Hier habe ich gerade gesehen, dass FileName diesen Inhalt hat: "E2003 Undeclared identifier: 'OpenDialog1'"
AutoList.LoadFromFile(OpenDialog1.FileName);
Sieht hier jemand einen Fehler? Die Datei soll immer leer sein, das ist sie aber nicht. Gruß, Schnittcher |
Re: LoadFromFile
Zitat:
sie dann leer sein. Grüße Klaus |
Re: LoadFromFile
Hallo,
sorry. Die Datei ist angeblich leer, dass ist Sie aber nicht. Gruß, Schnittcher |
Re: LoadFromFile
.. wie stellst Du denn fest ob die Datei leer ist oder nicht?
Ist FileSize(MyFile) = 0? Wenn Du dir die Datei mit einem (Hex)Editor anschaust, ist dann nichts drinnen? Grüße Klaus |
Re: LoadFromFile
Hallo,
doch da ist ja was drin.
Delphi-Quellcode:
So lasse ich mir die Größe der Datei anzeigen.
ShowMessage(inttostr(FileSize(MyFile)));
Gruß, Schnittcher |
Re: LoadFromFile
Zitat:
Ich denke wir schreiben aneinander vorbei. Wenn FileSize(MyFile) > 0 ist, dann ist die Datei nicht leer. Wieso bist Du dann der Meinung das sie leer sein sollte? Grüße Klaus |
Re: LoadFromFile
Hallo,
nochmal, ich will nicht das die Datei leer ist, sie enthält Daten, aber wenn ich das Programm starte wird mir immer gesagt, dass die Datei leer ist. Sie also eine Dateigröße von 0 hat. Aber das hat sich ja nicht. Sie hat ja Inhalt. Gruß, Schnittcher |
Re: LoadFromFile
Zitat:
(Es ist Freitagnachmittag, das Denken fällt mir schwer) Grüße Klaus |
Re: LoadFromFile
Zitat:
|
Re: LoadFromFile
Hallo,
ich versuche es nochmal. Beim Laden sollen die Daten der Datei in eine Liste eingetragen werden. Aber es wird nie was eingetragen. Er geht immer gleich zu CloseFile. Gruß, Schnittcher |
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;
|
Re: LoadFromFile
Ich hab die Datei hier, sie ist 0 Byte groß, also muss sie leer sein.
[edit] Das erklärt somit auch den Sprung zum CloseFile, weil das Programm nie in die for-Schleife kommt. [/edit] |
Re: LoadFromFile
Zitat:
Zitat:
Zitat:
|
Re: LoadFromFile
Hallo,
es tut mir leid, ich habe jetzt nichts geändert, am Freitag hat nichts funktioniert und heute starte ich das Programm und habe es nochmal versucht und es ging. Also kann ich euch nicht sagen wo der Fehler war. Gruß, Schnittcher |
Alle Zeitangaben in WEZ +1. Es ist jetzt 12:56 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