/System
/..../Handle
/..../Hardware
/..../SoftWare
/..../..../111
/..../..../222
/..../..../333
/..../MyWork
/..../..../aaa
/..../..../bbb
/..../..../ccc
/..../..../ddd
/..../..../fff
这是一个TXT文件,怎么把这个文件里的数据导到TreeView里面
其中System为根节点,Handle为其子节点,
111为SoftWare的子节点
/..../Handle
/..../Hardware
/..../SoftWare
/..../..../111
/..../..../222
/..../..../333
/..../MyWork
/..../..../aaa
/..../..../bbb
/..../..../ccc
/..../..../ddd
/..../..../fff
这是一个TXT文件,怎么把这个文件里的数据导到TreeView里面
其中System为根节点,Handle为其子节点,
111为SoftWare的子节点
var
TreeList: TStrings;
I: Integer;
Nodes: array[0..1024] of TTreeNode;
ALevel: Integer;
AText: String;
begin
if OpenDialog1.Execute then
begin
TreeList := TStringList.Create;
TreeList.LoadFromFile(OpenDialog1.FileName);
try
with TreeView1 do
begin
Items.Clear;
Nodes[0] := nil;
for I := 0 to TreeList.Count - 1 do
begin
GetTreeInfo(TreeList.Strings[I],ALevel,AText);
Nodes[ALevel] := TreeView1.Items.AddChild(Nodes[ALevel-1],AText);
end;
end;
finally
TreeList.Free;
end;
end;
end;procedure TForm1.GetTreeInfo(S: String; var Level: Integer; var AText: String);
var
Posi: Integer;
begin
Posi := 1;
Level := 1;
while Posi < Length(S) do
begin
if S[Posi] = '/' then
begin
if Copy(S,Posi+1,4)= '....' then
begin
Inc(Level);
Inc(Posi,5);
Continue;
end
else
begin
AText := Copy(S,Posi+1,Length(S)-Posi-1);
Break;
end;
end
else
Break;
end;
end;
该记录在树里面的级别和应该显示的文字.
GetTreeInfo 就是为了做这一步,
里面还有很多细节没有考虑到,完善一下就可以了!
像我上面问题中的格式呢??
System
/System/Handle
/System/Hardware
/System/SoftWare
/System/SoftWare/111
/System/SoftWare/222
/System/SoftWare/333
/System/MyWork
/System/SoftWare/aaa
/System/SoftWare/bbb
/System/SoftWare/ccc
/System/SoftWare/ddd
/System/SoftWare/fff
如果是种格式的,我建议采取寻找路径的方法
procedure TForm1.Button1Click(Sender: TObject);
var
TreeList: TStrings;
I: Integer;
Nodes: array[0..1024] of TTreeNode;
ALevel: Integer;
AText: String;
begin
if OpenDialog1.Execute then
begin
TreeList := TStringList.Create;
TreeList.LoadFromFile(OpenDialog1.FileName);
try
with TreeView1 do
begin
Items.Clear;
Nodes[0] := nil;
for I := 0 to TreeList.Count - 1 do
begin
GetTreeInfo(TreeList.Strings[I],ALevel,AText);
Nodes[ALevel] := TreeView1.Items.AddChild(Nodes[ALevel-1],AText);
end;
end;
finally
TreeList.Free;
end;
end;
end;procedure TForm1.GetTreeInfo(S: String; var Level: Integer; var AText: String);
var
Posi: Integer;
begin
Posi := 1;
Level := 1;
while Posi < Length(S) do
begin
if S[Posi] = '/' then
begin
if Copy(S,Posi+1,4)= '....' then
begin
Inc(Level);
Inc(Posi,5);
Continue;
end
else
begin
AText := Copy(S,Posi+1,Length(S)-Posi);
Break;
end;
end
else
Break;
end;
end;procedure TForm1.Button2Click(Sender: TObject);
function GetText(ALevel: Integer; AText: String): String;
var
J: Integer;
begin
Result := '/';
for J := 0 to ALevel-1 do
begin
Result := Result + '..../';
end;
Result := Result + AText;
end;
var
I: Integer;
SaveTree: TStrings;
begin
SaveTree := TStringList.Create;
try
for I := 0 to TreeView1.Items.Count - 1 do
begin
SaveTree.Add(GetText(TreeView1.Items[I].Level,TreeView1.Items[I].Text));
end;
if SaveDialog1.Execute then
SaveTree.SaveToFile(SaveDialog1.FileName);
finally
SaveTree.Free;
end;
end;