Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Speichern von Binären Bäumen in einer Datei (https://www.delphipraxis.net/139514-speichern-von-binaeren-baeumen-einer-datei.html)

Sebastian92 30. Aug 2009 14:50


Speichern von Binären Bäumen in einer Datei
 
Hallo liebe Forenleser,

Mein Problem bezieht sich (wie im Titel gesagt) auf einen binären Baum. Ich möchte Einen solchen Baum in eine Datei Schreiben. Funktioniert jedesmal perfekt. Allerdings ist in dieser Prozedur ein Wurm drin und ich weiß nicht wo der fehler liegt. Wahrscheinlich ist er sehr banal und dumm... TInhalt ist der Inhalt der Knoten des Baumes und dementsprechend auch der Variablentyp (file of TInhalt) der gespeichert werden soll,

Zur Erklärung:

zAktuell ist die "Wurzel" des Baumes, Inhalt wie oben gesagt Inhalt jedes Knotens und f mein Dateiname.

Delphi-Quellcode:
Procedure TBaum.SaveDatei(zAktuell :TZeiger);
var Inhalt :TInhalt;
begin
  if(zAktuell<>nil)
    then begin
      SaveDatei(zAktuell^.zLinks);
      Inhalt:=zAktuell^.Inhalt;
      Write(sDatei,Inhalt);
      SaveDatei(zAktuell^.zRechts);
    end;
end;

Procedure TBaum.Save(f :String; zAktuell :TZeiger);
begin
  if(zAktuell<>nil)
    then begin
      AssignFile(sDatei,f);
      if FileExists(f)
        then Reset(sDatei)
        else ReWrite(sDatei);
      SaveDatei(zAktuell);
      CloseFile(sDatei);
    end;
end;
mit freundlichen Grüßen,

Sebastian

alzaimar 30. Aug 2009 14:54

Re: Speichern von Binären Bäumen in einer Datei
 
Zitat:

Zitat von Sebastian92
Funktioniert jedesmal perfekt. Allerdings ist in dieser Prozedur ein Wurm drin und ich weiß nicht wo der fehler liegt.

Hallo lieber Forenschreiber,

Ich verstehe dein Problem nicht. Gleichzeitig perfekt laufen und trotzdem ist ein Wurm drin und ein Fehler?

Welcher Wurm?
Welcher Fehler?

Wie liest du den Baum wieder ein?

Sebastian92 30. Aug 2009 14:57

Re: Speichern von Binären Bäumen in einer Datei
 
Diese prozedur(en) Funktioniert bei anderen Programmen, die ich geschrieben habe einwandfrei... bei diesem Programm allerdings Schreibt er mir zwar etwas in die Datei rein, allerdings ist dies (so sieht es aus) überflüssiger Datenmüll... und ich kann mir nicht erklären warum

Sebastian92 30. Aug 2009 14:58

Re: Speichern von Binären Bäumen in einer Datei
 
mein Auslesen sieht twie folgt aus:

Delphi-Quellcode:
procedure TBaum.LoadDatei(f :String);
var Inhalt :TInhalt;
begin
  if FileExists(f)
    then begin
      Clear;
      Assignfile(sDatei,f);
      Reset(sDatei);
      while(not Eof(sDatei))
        do begin
          Write(sDatei,Inhalt);
          Hinzu(Inhalt.Information);
        end;
      CloseFile(sDatei);
    end
    else MessageDlg('Datei existiert nicht',mtError,[mbOk],0);
end;
p.s. Die Prozedur Clear, Löscht den Baum.

Hawkeye219 30. Aug 2009 16:54

Re: Speichern von Binären Bäumen in einer Datei
 
Hallo Sebastian,

benutzt du zum Lesen der Daten wirklich die Standardprozedur Delphi-Referenz durchsuchenWrite?

Gruß Hawkeye

alzaimar 30. Aug 2009 21:10

Re: Speichern von Binären Bäumen in einer Datei
 
Zeig mal bitte die Definition des Feldes 'Inhalt' (Typ: TInhalt?)

Sebastian92 31. Aug 2009 14:58

Re: Speichern von Binären Bäumen in einer Datei
 
Delphi-Quellcode:
  TInformation = record
                   Name :String[20];
                 end;

  TInhalt = record
              Nummer     : Integer;
              Information : TInformation;
            end;
TInformation steht für eine beliebigen record. In diesem Programm habe ich als Platzhalter einen String.


Alle Zeitangaben in WEZ +1. Es ist jetzt 03:11 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