求一简单算法

fangsp 2008-10-13 12:27:56
/System
/..../Handle
/..../Hardware
/..../SoftWare
/..../..../111
/..../..../222
/..../..../333
/..../MyWork
/..../..../aaa
/..../..../bbb
/..../..../ccc
/..../..../ddd
/..../..../fff
这是一个TXT文件,怎么把这个文件里的数据导到TreeView里面
其中System为根节点,Handle为其子节点,
111为SoftWare的子节点
...全文
76 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
fangsp 2008-10-13
  • 打赏
  • 举报
回复
谢谢楼上的
马上就给分
chenzhuo 2008-10-13
  • 打赏
  • 举报
回复

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;
喝口水 2008-10-13
  • 打赏
  • 举报
回复
楼主代码做的好快,我才发现这个贴子,一楼的就已经把代码发上了,佩服,本人对算法什么的也非常感兴趣,不过看你的代码,主要是对'....'进行处理,感觉楼主的文本文件里面的内容,不一定是这种格式的,是不是这种格式的
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
如果是种格式的,我建议采取寻找路径的方法
fangsp 2008-10-13
  • 打赏
  • 举报
回复
那我怎样把TreeView里的内容保存到
像我上面问题中的格式呢??
chenzhuo 2008-10-13
  • 打赏
  • 举报
回复
主要是从字符传中分析出
该记录在树里面的级别和应该显示的文字.
GetTreeInfo 就是为了做这一步,
里面还有很多细节没有考虑到,完善一下就可以了!
fangsp 2008-10-13
  • 打赏
  • 举报
回复
试一下
如果可以马上接帖
chenzhuo 2008-10-13
  • 打赏
  • 举报
回复
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-1);
Break;
end;
end
else
Break;
end;
end;

16,748

社区成员

发帖
与我相关
我的任务
社区描述
Delphi 语言基础/算法/系统设计
社区管理员
  • 语言基础/算法/系统设计社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧