Einzelnen Beitrag anzeigen

Benutzerbild von SirThornberry
SirThornberry
(Moderator)

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

Re: baum bestehend aus arrays abspeichern

  Alt 13. Mär 2005, 13:07
hmm, dann müsst ich bzw. eher du den source bissl abändern.
woher weißt du wieviel Stings benötigt werden (also abgespeicher werden müssen). Mit <> nil gehts ja diesmal nicht.

So hier mal abgeänderter Source um alle 11 Strings abzuspeichern (ungetestet)
Delphi-Quellcode:
procedure LoadKnotFromStream(AStream: TStream; AKnot: PKnot);
var LChilds, LCount, LInt: Integer;
begin
  for LCount := 1 to 11 do
  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);
  end;

  AStream.Read(LChilds, SizeOf(LChilds));
  for LCount := 1 to 11 do
  begin
    if LCount <= LChilds then
    begin
      //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
  for LCount := 1 to 11 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);
  end;

  //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
    SaveKnotToStream(AStream, AKnot.S[LChilds]);
end;
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat