Ich würde mir eine kleine Methode schreiben, die mir aus einem übergebenen String den Level (Anzahl der Tabs), den Tag (also 'Name', 'Alter','Vorbesitzer') und -falls vorhanden- den Wert, also den Zeil nach dem ':' liefert.
Delphi-Quellcode:
Type
TTreeNodeDescriptor = record
level : Integer;
Caption : String;
Value : String;
Procedure FromString (aString : String);
end;
Procedure TTreeNodeDescriptor.FromString (aString : String);
const
TAB = #009; // ist das nicht irgendwo in SysUtils o.ä. schon deklariert?
var
valueDelimiterFound : Boolen;
Begin
Level := 0;
Value := '';
Caption := '';
valueDelimiterFound := False;
for c in aString do
case c of
TAB :
Inc(Level);
':' :
valueDelimiterFound := true;
else
if valueDelimiterFound then
Value := Value + c
else
Caption:=Caption + c;
end
end;
Der Code rennt 1x durch den String und verzichtet Pos und Delete.
Delphi-Quellcode:
for line in memo1.lines do begin
t := TTreeLevelDescriptior.FromString(line);
if t.Caption = 'Name' then
writeln('Anzahl der Tabs (Level)',t.Level,'. Name=',t.Value);
end;
Und falls Du morgen den kompletten Baum aufspannen willst, hast Du mit der 'FromString' Methode schon alles, was Du brauchst.