![]() |
Datei in ein TVirtualStringTree einlesen
hi @all,
ich eine Datei in folgendem Format, die ich gerne in ein VirtualStringTree einlesen möchte: Item1 | FirstSubItem1 | SecondSubItem1 | ThirdSubItem1 Item2 | FirstSubItem1 Item1 | FirstSubItem2 | SecondSubItem2 | ThirdSubItem2 Item1 | FirstSubItem3 Item1 | FirstSubItem2 | SecondSubItemA | ThirdSubItemB also hoffe ihr versteht was ich meine. Ordnung ist keine vorhanden^^. der zugehörige baum soll dann folgendermaßen aussehen:
Code:
Item1
|_ FirstSubItem1 | |_ SecondSubItem1 | |_ThirdSubItem1 | |_ FirstSubItem2 | |_ SecondSubItem2 | | |_ ThirdSubItem2 | |_ SecondSubItemA | |_ ThirdSubitemB | |_ FirstSubItem3 Item2 |_FirstSubItem1 so ich hoffe ihr versteht was ich meine. Leider kann ich das Problem nicht besser darstellen :-\ Ich weiße nocheinmal darauf hin, dass die Einträge in der Datei durcheinander sein können... Hoffe auf hilfe :) MfG |
Re: Bestimmte Datei in ein TVirtualStringTree einlesen
so. nach langem Hin und Her hab ich es endlich geschafft^^
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
type TMyNode = record Name: String; Node: PVirtualNode; end; var i, k: Integer; TreeData: TTreeData; tmp: TStringDynArray; tmpNode: PVirtualNode; NodeList: array of TMyNode; tmp_: cardinal; function GetNode(NName: String): PVirtualNode; var j: integer; begin Result := nil; for j := Low(NodeList) to High(NodeList) do if NName = NodeList[j].Name then Result := NodeList[j].Node; end; begin tmp_ := GetTickCount; // VirtualStringTree vorbereiten VST.NodeDataSize:=SizeOf(TTreeData); VST.BeginUpdate; // Liste durchlaufen for i := 0 to ListBox1.Items.Count - 1 do begin tmp := Explode('|', ListBox1.Items[i]); tmpNode := nil; // Teile durchlaufen for k := Low(tmp) to High(tmp) do begin TreeData.FCaption := tmp[k]; TreeData.FData := tmp[k]; if GetNode(tmp[k]) = nil then tmpNode := AddVSTStructure(VST, tmpNode, TreeData) else tmpNode := GetNode(tmp[k]); // Node merken SetLength(NodeList, Length(NodeList) + 1); NodeList[Length(NodeList) - 1].Name := tmp[k]; NodeList[Length(nodeList) - 1].Node := tmpNode; end; end; VST.EndUpdate; caption := inttostr(gettickcount - tmp_) + 'ms'; end; das Problem ist nur die Geschwindigkeit. Das dauert fast 2 sekunden. die Datei hat 2000 Zeilen.... hat jemand eine effizientere Lösung? MfG |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:42 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz