Hallo ihr lieben,
vielen Dank für eure Impulse !
Also
Hier kommt die Hilfe zur Selbsthilfe...
Warum verwendest du keine Zwischenvariablen?
ist natürlich völlig richtig.
Ich habe mir den code von Dejan Vu einmal angesehen und an einigen Stellen modifiziert. Das Ergebnis funktioniert ganz gut:
Delphi-Quellcode:
Type
TTreeNodeDescriptor = record
level : Integer;
Caption : String;
Value : String;
Procedure FromString (aString : String);
end;
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// TTreeNodeDescriptor - credits to Dejan Vu
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
Procedure TTreeNodeDescriptor.FromString (aString : String);
const
TAB = #009;
var
valueDelimiterFound: Boolean;
c:char;
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;
{++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
// Datei importieren button
+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++}
procedure TFmain.button_scen_importClick(Sender: TObject);
var
line:string;
t : TTreeNodeDescriptor;
anode:TTreeNode;
begin
treeview.Items.Clear;
if Opendialog1.Execute then memo1.Lines.LoadFromFile(Opendialog1.FileName);
for line in memo1.lines do
begin
t.FromString(line);
if (t.Caption = '"name"') then
begin
case t.level of
1: anode:=treeview.Items.Add(Nil,t.Value);
3: begin
treeview.Items.AddChild(anode,t.Value);
//Node als knoten für die nächste Ebene vorbereiten?
end;
5: treeview.Items.AddChild(anode,t.Value);
end;
end;
end;
End;
So kann man nicht nur den String auf Tabulatoren untersuchen
for <achar> in <astring>
sondern erhält auch den dazugehörigen Wert. Das Einsortieren in ein Treeview klappt nur noch nicht ganz, da die 3. Ebene
5: treeview.Items.AddChild(anode,t.Value);
nicht als Child von der 2. Ebene einsortiert wird.