Home » Tutorials » Datenspeicherung » Binäre Dateien

Binäre Dateien

TKontakte.LoadFromBinaryTag

Die Klasse TKontakte soll selbst in der Lage sein, sich aus den Daten des Zwischenformats zu rekonstruieren. Dies geschieht in der Methode LoadFromBinaryTag, die wir jetzt implementieren werden.

TKontakte = class(TObjectList)
  private
    function GetItems(Idx: integer): TKontakt;
  public
    procedure LoadFromBinaryTag(Tag: TRakBinaryTag);
    procedure SaveToBinaryTag(Tag: TRakBinaryTag);

    function NewKontakt: TKontakt;

    property Items[Idx: integer]: TKontakt read GetItems; default;
  end;

procedure TKontakte.LoadFromBinaryTag(Tag: TRakBinaryTag);
var
  TagList: IRakBinaryTagList;
  I: integer;
  Kontakt: TKontakt;
begin
  Clear;
  TagList := Tag.FindTagsByName('Kontakt');
  for I := 0 to TagList.Count - 1 do
  begin
    Kontakt := NewKontakt;
    Kontakt.LoadFromBinaryTag(TagList.Items(I));
  end;
end;

LoadFromBinaryTag erhält über den Parameter Tag, die Daten, aus denen es die Kontakte erzeugen kann.

Clear;

Zuerst werden evtl. noch vorhandene Kontakte gelöscht.

TagList := Tag.FindTagsByName('Kontakt');

Dann werden die Knoten angefordert, welche die Daten eines jeden Kontaktes enthalten. Im Gegensatz zu der Methode FindFirstTag, die wir im vorherigen Abschnitt kennen gelernt haben, besorgt FindTagsByName nicht nur den ersten Unterknoten mit dem Namen ‚Kontakt‘, sondern alle. Diese erhält man in Form einer Liste. Die Liste ist ein Schnittstellenobjekt. Deshalb müssen wir uns nicht um die Freigabe der Liste kümmern, das wird automatisch am Ende der Methode erledigt.

for I := 0 to TagList.Count - 1 do

Wir arbeiten jeden Knoten einzeln ab.

Kontakt := NewKontakt;

Für jeden Knoten wird ein neuer Kontakt erzeugt.

Kontakt.LoadFromBinaryTag(TagList.Items(I));

Der Kontakt muss selbst seine Daten aus dem Knoten herauslesen. Dieses LoadFromBinaryTag implementieren wir im nächsten Abschnitt.