AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Sonstige Fragen zu Delphi Delphi mehrere Datensätze in Datei schreiben und wieder Auslesen
Thema durchsuchen
Ansicht
Themen-Optionen

mehrere Datensätze in Datei schreiben und wieder Auslesen

Ein Thema von saibotq · begonnen am 2. Dez 2005 · letzter Beitrag vom 3. Dez 2005
Antwort Antwort
saibotq

Registriert seit: 2. Dez 2005
3 Beiträge
 
Delphi 4 Professional
 
#1

mehrere Datensätze in Datei schreiben und wieder Auslesen

  Alt 2. Dez 2005, 22:16
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:
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;
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...

Was kann ich tun?
  Mit Zitat antworten Zitat
Benutzerbild von sniper_w
sniper_w

Registriert seit: 12. Dez 2004
Ort: Wien, Österriech
893 Beiträge
 
Delphi 6 Enterprise
 
#2

Re: mehrere Datensätze in Datei schreiben

  Alt 2. Dez 2005, 22:18
Zitat:
procedure Rewrite(var F: File [; Recsize: Word ] );

Description

Rewrite creates a new external file with the name assigned to F.

F is a variable of any file type associated with an external file using AssignFile. RecSize is an optional expression, which can be specified only if F is an untyped file. If F is an untyped file, RecSize specifies the record size to be used in data transfers. If RecSize is omitted, a default record size of 128 bytes is assumed.

If an external file with the same name already exists, it is deleted and a new empty file is created in its place.
Was du brauchst ist Append stat rewrite...
Zitat:
Prepares an existing file for adding text to the end.

procedure Append(var F: Text);
Katura Haris
Es (ein gutes Wort) ist wie ein guter Baum, dessen Wurzel fest ist und dessen Zweige in den Himmel reichen.
  Mit Zitat antworten Zitat
saibotq

Registriert seit: 2. Dez 2005
3 Beiträge
 
Delphi 4 Professional
 
#3

Re: mehrere Datensätze in Datei schreiben

  Alt 2. Dez 2005, 22:29
schon mal vielen dank, das erste problem ist gelöst

jetzt kriege ich nur den fehler "Versuch hinter dem Dateiende zu lesen" an dieser Stelle:

Delphi-Quellcode:
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;
ich dachte mit "while EOF(KSK)=false" hätte ich ausgeschlossen, hinter dem dateiende zu lesen??
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#4

Re: mehrere Datensätze in Datei schreiben

  Alt 3. Dez 2005, 03:42
Zitat von saibotq:
Delphi-Quellcode:
// Datei öffnen
read (KSK, vergleich);
while not EOF(KSK) do begin
  if vergleich.nr=eingabe.nr then
    if vergleich.pin=eingabe.pin then
     label5.caption:=(floattostr(vergleich.stand));
  read (KSK, vergleich);
end;
Trifft das read auf ein Zeilenende und das ist bereits EOF, dann ist Ende und trotzdem wird ein Zugriff darauf gemacht. Dieser ist aber undefiniert -> Fehler.

P.S.: etwas genauer : am SCHLUß der while Schleife muß EOF stehen, dann landet man nicht mehr in der Schleife !!
Gruß
Hansa
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#5

Re: mehrere Datensätze in Datei schreiben

  Alt 3. Dez 2005, 11:43
Also z.B. so:
Delphi-Quellcode:
// 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;
//edit
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.
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
saibotq

Registriert seit: 2. Dez 2005
3 Beiträge
 
Delphi 4 Professional
 
#6

Re: mehrere Datensätze in Datei schreiben und wieder Auslese

  Alt 3. Dez 2005, 15:33
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:
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;
also PROBLEM GELÖST
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#7

Re: mehrere Datensätze in Datei schreiben und wieder Auslese

  Alt 3. Dez 2005, 16:32
Jo. Problem gelöst Patient tot ? Bei Tigerman siehts ähnlich aus. Schrecklich. 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)
Gruß
Hansa
  Mit Zitat antworten Zitat
tigerman33

Registriert seit: 30. Jul 2005
Ort: München
423 Beiträge
 
Delphi 2005 Professional
 
#8

Re: mehrere Datensätze in Datei schreiben und wieder Auslese

  Alt 3. Dez 2005, 17:00
Ach ja klar, ich Depp.
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... )
Christian
Der Computer hilft mir, Probleme zu lösen, die ich ohne Computer nicht hätte.
  Mit Zitat antworten Zitat
Hansa

Registriert seit: 9. Jun 2002
Ort: Saarland
7.554 Beiträge
 
Delphi 8 Professional
 
#9

Re: mehrere Datensätze in Datei schreiben und wieder Auslese

  Alt 3. Dez 2005, 17:21
Dierkt nach dem öffnen würde ich IOresult auf 0 prüfen. Bei <> 0 Fehlermeldung und nix mehr mit while.
Gruß
Hansa
  Mit Zitat antworten Zitat
Antwort Antwort


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 10:53 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