如何根据txt中的信息动态的生成一棵树?

时间:2022-11-12 10:40:30
txt中信息格式如下:
txt中的信息
+公司集合
   ++公司A
      公司A的部门1
      公司A的部门2
      公司A的部门3
   ++公司B
      公司B的部门1
      公司B的部门2
      公司B的部门3
      公司B的部门4
   ++公司C
      公司C的部门1
      公司C的部门2
      公司C的部门3
      公司C的部门4
      公司C的部门5
   ++公司D
      公司D的部门1
      公司D的部门2
      公司D的部门3
……

为了发帖好看,我将TXT中的信息选择成了xml代码格式。

在此我有2个问题:
Q1: 现在我需要根据上面txt文件中的信息动态生成一棵树,该如何做才好?
Q2:生成了树之后,当我在点击了1级节点(即就是公司A,公司B,公司C,公司D……)会弹出一个对话框界面。此界面的格式是这样的:
     假如我单击了公司A这个节点,就生成下面的界面:(括号代表下拉列表框)

        公司A的部门1  ()
      公司A的部门2  ()
      公司A的部门3  ()

        
     上面的界面要动态生成,该如何实现?
     此处的动态的意思是:txt中的信息是会变化的,但格式不会变,我想根据公司A这个节点下的具体子项来生成对应的界面。
不知道问题2是否描述清楚。


6 个解决方案

#1


这个题有难度,UP

#2


你把信息制作成XML文件不是更方便读取?很多现成的库访问XML,这些节点的父子关系非常容易访问。

不过你的这个信息格式算是很简单的,解析起来应该不复杂,可以用ifstream来一行一行读取字符串,压缩前面的空格或TAB,前面一个+号的是第一级,两个+号的是第二级,没+号的是第三级,在内存中组装成树。

#3


1、读文件时用一个变量记录当前节点的深度。逐行读入文件内容,滤掉前面的空格,检查+号的个数。如果+号个数为0,则插入到当前节点。如果+号个数不为0,则与当前深度比较,确定插入的位置(大于则依然插入到当前节点,等于则插入到父节点,小于则根据差值逐层取父节点),插入后将新节点作为当前节点。
2、根据选择的节点遍历子数,创建控件并插入子项。

#4


这种树的格式用xml文件保存比较好,这样你解析起来也很容易,同时也可以方便的生成树的结构。
然后根据你的树,对应的插入控件以及对话框...

#5


这个就用最普通的多叉树构造就是了。。。。。。

#6


参考代码:
http://blog.csdn.net/dizuo/archive/2009/03/08/3968596.aspx

把测试程序中的main主程序,构造元素的数据来源改为读取自txt文件即可

#1


这个题有难度,UP

#2


你把信息制作成XML文件不是更方便读取?很多现成的库访问XML,这些节点的父子关系非常容易访问。

不过你的这个信息格式算是很简单的,解析起来应该不复杂,可以用ifstream来一行一行读取字符串,压缩前面的空格或TAB,前面一个+号的是第一级,两个+号的是第二级,没+号的是第三级,在内存中组装成树。

#3


1、读文件时用一个变量记录当前节点的深度。逐行读入文件内容,滤掉前面的空格,检查+号的个数。如果+号个数为0,则插入到当前节点。如果+号个数不为0,则与当前深度比较,确定插入的位置(大于则依然插入到当前节点,等于则插入到父节点,小于则根据差值逐层取父节点),插入后将新节点作为当前节点。
2、根据选择的节点遍历子数,创建控件并插入子项。

#4


这种树的格式用xml文件保存比较好,这样你解析起来也很容易,同时也可以方便的生成树的结构。
然后根据你的树,对应的插入控件以及对话框...

#5


这个就用最普通的多叉树构造就是了。。。。。。

#6


参考代码:
http://blog.csdn.net/dizuo/archive/2009/03/08/3968596.aspx

把测试程序中的main主程序,构造元素的数据来源改为读取自txt文件即可