/System
/..../Handle
/..../Hardware
/..../SoftWare
/..../..../111
/..../..../222
/..../..../333
/..../MyWork
/..../..../aaa
/..../..../bbb
/..../..../ccc
/..../..../ddd
/..../..../fff
这是一个TXT文件,怎么把这个文件里的数据导到TreeView里面
其中System为根节点,Handle为其子节点,
111为SoftWare的子节点

解决方案 »

  1.   

    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;
      

  2.   

    主要是从字符传中分析出
    该记录在树里面的级别和应该显示的文字.
    GetTreeInfo 就是为了做这一步,
    里面还有很多细节没有考虑到,完善一下就可以了!
      

  3.   

    那我怎样把TreeView里的内容保存到
    像我上面问题中的格式呢??
      

  4.   

    楼主代码做的好快,我才发现这个贴子,一楼的就已经把代码发上了,佩服,本人对算法什么的也非常感兴趣,不过看你的代码,主要是对'....'进行处理,感觉楼主的文本文件里面的内容,不一定是这种格式的,是不是这种格式的
    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 
    如果是种格式的,我建议采取寻找路径的方法
      

  5.   


    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;