Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#11

Re: baum bestehend aus arrays abspeichern

  Alt 13. Mär 2005, 12:50
Gibt es nur soviel Strings (A) wieviel Knoten es auch gibt (S)?

Hier die Speichern- und Laden-Procedure, allerdings ungetestet
Delphi-Quellcode:
procedure LoadKnotFromStream(AStream: TStream; AKnot: PKnot);
var LChilds, LCount, LInt: Integer;
begin
  AStream.Read(LChilds, SizeOf(LChilds));
  for LCount := 1 to 11 do
  begin
    if LCount <= LChilds then
    begin
      //Länge des Strings lesen
      AStream.Read(LInt, SizeOf(LInt));
      setlength(AKnot.A[LCount], LInt);
      //String aus Stream lesen
      AStream.Read(AKnot.A[LCount][1], LInt);
      //speicher für unterknoten anfordern
      new(AKnot.S[LCount]);
      LoadKnotFromStream(AStream, AKnot.S[LCount]);
    end else
      AKnot.S[LCount] := nil;
  end;
end;

procedure SaveKnotToStream(AStream: TStream; AKnot: PKnot);
var LChilds, LCount, LInt: Integer;
begin
  //ermitteln wieviel Chidls
  LChilds := 0;
  while (LChilds < 11) and (AKnot.S[LChilds + 1] <> nil) do
    inc(LChilds);
  //Anzahl der Childs in Stream speichern
  AStream.Write(LChilds, SizeOf(LChilds));
  //Childs durchgehen
  for LCount := 1 to LChilds do
  begin
    //Länge des Strings ermitteln
    LInt := Length(AKnot.A[LCount]);
    //Länge des Strings speichern
    AStream.Write(LInt, SizeOf(LInt));
    //String speichern
    AStream.Write(AKnot.A[LCount][1], LInt);
    //unterKnoten aufrufen
    SaveKnotToStream(AStream, AKnot.S[LChilds]);
  end;
end;
irgendwo wirst du ja einen RootKnoten vom Typ "TKnot" haben. Somit erfolgt der Aufruf so:
Delphi-Quellcode:
var LStream: TStream;
begin
  LStream := TMemoryStream.Create;
  SaveKnotToStream(LStream, PKnot(@YourRootKnot));
  LStream.SaveToFile('xyz.txt');
  LStream.Free;
end;
Laden funkioniert dann nach dem gleichen Prinzip.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat