![]() |
mehrere Datensätze in Datei schreiben und wieder Auslesen
N'abend,
ich versuche in eine Datei mehrere Datensätze von einem benutzerdefinierten Typ reinzuschreiben. Das Problem ist, dass es irgendwie nicht klappt mehr als einen Datensatz in die Datei zu schreiben, ohne den ersten Datensatz zu überschreiben.
Delphi-Quellcode:
Beim ersten mal, wo ich die Prozedur ausführe, schreibt das Programm die korrekten Daten in die Datei. Beim zweiten mal wird auch an der zweiten Position in der Datei geschrieben, aber dabei wird der erste Datensatz überschrieben...
procedure TForm1.Button2Click(Sender: TObject);
var eingabe:Kontotyp; begin assignfile (KSK, 'KSK.dat'); rewrite (KSK); seek(KSK,anzahl); with eingabe do begin nr:=edit3.text; pin:=edit4.text; stand:=strtofloat(edit5.text); end; write (KSK, eingabe); inc(Anzahl); closefile(KSK); end; Was kann ich tun? |
Re: mehrere Datensätze in Datei schreiben
Zitat:
Zitat:
|
Re: mehrere Datensätze in Datei schreiben
schon mal vielen dank, das erste problem ist gelöst :-D
jetzt kriege ich nur den fehler "Versuch hinter dem Dateiende zu lesen" an dieser Stelle:
Delphi-Quellcode:
ich dachte mit "while EOF(KSK)=false" hätte ich ausgeschlossen, hinter dem dateiende zu lesen??
while EOF(KSK)=false do
begin read (KSK, vergleich); if vergleich.nr=eingabe.nr then if vergleich.pin=eingabe.pin then label5.caption:=(floattostr(vergleich.stand)); end; |
Re: mehrere Datensätze in Datei schreiben
Zitat:
P.S.: etwas genauer : am SCHLUß der while Schleife muß EOF stehen, dann landet man nicht mehr in der Schleife !! |
Re: mehrere Datensätze in Datei schreiben
Also z.B. so:
Delphi-Quellcode:
//edit
// Datei öffnen
if not EOF(KSK) then begin // ist überhaupt was drin? read (KSK, vergleich); if not EOF(KSK) then repeat // etwas unschön, muss aber sein... if vergleich.nr=eingabe.nr then if vergleich.pin=eingabe.pin then label5.caption:=(floattostr(vergleich.stand)); read (KSK, vergleich); until EOF(KSK); end; PS: Ich persönlich schwöre Stein und Bein auf TFileStreams. Die kann ich dir ans Herz legen, sieh dir die mal an. Hat zwar nicht direkt was mit deinem Problem zu tun, aber an vielen Stellen wird dadurch IMHO das Hantieren mit Dateien viel einfacher. |
Re: mehrere Datensätze in Datei schreiben und wieder Auslese
Erstmal vielen Dank für die Hilfe, trotzdem hat es irgendwie so noch nicht geklappt. Mir ist aber zum Glück eine andere Idee gekommen, ohne das ******* EOF:
Delphi-Quellcode:
also PROBLEM GELÖST
seek(KSK,0);
for i:=0 to filesize(KSK)-1 do begin read (KSK, vergleich); if vergleich.nr=eingabe.nr then if vergleich.pin=eingabe.pin then label5.caption:=(floattostr(vergleich.stand)); end; |
Re: mehrere Datensätze in Datei schreiben und wieder Auslese
Jo. Problem gelöst Patient tot ? Bei Tigerman siehts ähnlich aus. Schrecklich. :lol: Tigerman : gesehen, daß ich mit einer einzigen Zeile mit while und read an den richtigen Stellen gleich 2 deiner Abfragen auf EOF und auch noch das repeat gleich mit erschlagen habe ? Gut viele Wege führen nach Rom. Aber so was mit for zu machen, das würde ich mir erst gar nicht angewöhnen. Irgendwann kommt dann noch Break an unnötigen Stellen ins Spiel und und... Und zu guter letzt kommt der berühmte Sphagetti-Code bei dem Ganzen raus. 8)
|
Re: mehrere Datensätze in Datei schreiben und wieder Auslese
Ach ja klar, ich Depp. :wall:
Aus irgendeinem Grund war ich da der Meinung, dass bei vorgestellter Prüfung das letzte read einen Fehler produzieren könnte. Das ist aber natürlich völliger Quatsch, die while-Schleife ist da eindeutig das Mittel der Wahl. Ich schreibe fünfzigmal "Die while-Schleife funktioniert hier besser als die repeat-Schleife". "Die while-Schleife funktioniert hier besser als die repeat-Schleife" "Die while-Schleife funktioniert hier besser als die repeat-Schleife" "Die while-Schleife funktioniert hier besser als die repeat-Schleife" "Die while-Schleife funktioniert hier besser als die repeat-Schleife" "Die while-Schleife funktioniert hier besser als die repeat-Schleife" ... PS: Aber die erste if-Abfrage muss denke ich trotzdem sein. Es gibt doch auch leere Dateien, oder? (Sag jetzt nicht nein, sonst muss ich nochmal 50 Sätze schreiben... :lol: ) |
Re: mehrere Datensätze in Datei schreiben und wieder Auslese
Dierkt nach dem öffnen würde ich IOresult auf 0 prüfen. Bei <> 0 Fehlermeldung und nix mehr mit while.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 09:39 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