Entwickler-Ecke
Dateizugriff - fehler beim versuch aus Datei zu lesen
flaming|barney - Di 01.03.05 15:45
Titel: fehler beim versuch aus Datei zu lesen
Hi...
ich kenne mich mit dem Speichern und lesen in oder aus einer datei nicht wirklich aus.
Habe nun eine kleine datenbank geschrieben, bei der die daten auf die festplatte gespeichert werden sollen und beim start des programms sollen daten gelesen werden.
ich gebe hier vorerst nur die proceduren, die das Speichern und lesen betreffen, an:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12: 13: 14: 15: 16: 17: 18: 19: 20: 21: 22: 23: 24: 25: 26: 27: 28: 29: 30: 31: 32: 33: 34: 35: 36: 37: 38: 39: 40: 41: 42: 43: 44: 45: 46: 47: 48: 49: 50: 51: 52: 53: 54: 55: 56: 57: 58: 59: 60: 61:
| implementation var x: Integer;
type TPerson = record Name: String[20]; Vorname: String[20]; Strasse: String[30]; PLZ: String[10]; Ort: String[30]; end;
var f: File of TPerson; var verz: String; var Buch: array[1..10] of TPerson; {$R *.dfm}
procedure datei_neu; begin {$I-} Rewrite(f); {$I+} if IOResult <> 0 then Showmessage('Fehler beim Erzeugen einer neuen Datei'); end;
procedure datei_schreiben; var i: Integer; begin {$I-} Reset(f) ; if IOResult <>0 then Showmessage('Fehler beim Lesen'); for i:= 1 to 10 do read(f, Buch[i]); end;
procedure datei_lesen; var i: Integer; begin {$I-} Reset(f) {$I+}; in ein umändert, wird der fehler nicht mehr angezeigt. Allerdings erscheint nun das Fenster "Fehler beim Lesen" } if IOResult <> 0 then Showmessage('Fehler beim Lesen'); for i:= 1 to 10 do read(f,Buch[i]); end;
procedure TForm1.DAT_LOAD(Sender: TObject); var i: integer; begin verz:= ExtractFilePath(ParamStr(0)) + 'personen.dat'; AssignFile(f, verz); {$I-} Reset(f) {$I+}; if IOResult <> 0 then begin i:= Application.MessageBox('Datei neu anlegen?' , ' ', 52); if i= 6 then datei_neu else halt; end else datei_lesen; end; |
Bei dem versuch nun etwas in die neu erstellte datei zu laden (das erstellen funktioniert) wird mir nun gesagt, dass versucht wird noch hinter dem dateiende zu lesen... ?_?
Wäre super, wenn mir einer von euch weiterhelfen könnte
mfg barney
Moderiert von
AXMD: Code- durch Delphi-Tags ersetzt.
AXMD - Di 01.03.05 15:54
Ist es Absicht, dass du die Datei nirgendwo schließt?
AXMD
flaming|barney - Di 01.03.05 15:57
mhh habe ich noch nicht drüber nachgedacht...
aber ich greife beim arbeiten mit dem prog in so ziemlich jedem schritt auf die datei zu.
Entweder um veränderungen zu sichern, oder um informationen über eine andere Person zu laden.
Leider verstehe ich die Algorithmen, die ich zum speichern usw. benutze nur teilwese. Wann muss ich zB beim {I+} ein "$" zeichen davorsetzen und wann nicht?
Delete - Di 01.03.05 15:58
Und warum ist das
Delphi-Quelltext
1:
| var f: File of TPerson; |
global? Du solltest selbst sehen, dass man dadurch ganz schnell selber die Übersicht verliert.
flaming|barney - Di 01.03.05 16:00
weil ich zu faul bin um das bei jeder prozedur noch mal lokal zu deklarieren...
ist das für euch zu unübersichtlich? (bin chaot ;))
kann es auch nochmal ändern...
Das ist zB auch so einer von den Befehlen, die ich selber nicht verstehe.
Ich habe das prog schon einmal in der schule geschrieben und wollte es nun gerne zu Hause zum verfeinern und weiterarbeiten nochmal schreiben. Nur leider klappt es nicht -.-"
flaming|barney - Di 01.03.05 16:48
habe den fehler nun mit etwas hilfe aus dem irc gefunden.
habe in der prozedur "datei_schreiben" anstelle von
Delphi-Quelltext
1: 2:
| for i:= 1 to 10 do write(f, Buch[i]); |
Delphi-Quelltext
1: 2:
| for i:= 1 to 10 do read(f, Buch[i]); |
dort stehen gehabt.
Danke für eure unterstützung,
barney
Delete - Di 01.03.05 20:36
| flaming|barney hat folgendes geschrieben: |
| weil ich zu faul bin um das bei jeder prozedur noch mal lokal zu deklarieren... |
Und du meinst das rechtfertigt unsaubere Programmierung? Ich möchte dein gesicht sehen, wenn du dein auto aus der Werstatt holst und der Mechaniker zu dir sagt: "Ach was ich noch sagen wollte, ich habe die Reifen nur mit einer Mutter festgemacht, für den Rest war ich zu faul." :roll:
flaming|barney - Di 01.03.05 21:29
Dein Beispiel mag auf einiges zutreffen... aber ich glaube nicht auf diesen Fall:
Warum ist es denn hier unübersichtlich? ich habe wahrscheinlich viel zu wenig programmiererfahrung, um das beurteilen zu können. Aber ich dachte es sei vorteilhaft eine variable dann global zu deklarieren, wenn ich in mehreren Prozeduren auf sie zugreifen möchte.
Damit hier erkannt wird, wie "f" deklariert ist, habe ich ja den gesamten implementation bereich dazugeschrieben...
ps: werde mir das abgewöhnen und wieder vermehrt von lokalen variablen gebrauch machen. Bei größeren programmen als meinen muss ich recht geben: Es würde unübersichtlich werden.
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!