找回密码
 加入
搜索
查看: 7845|回复: 9

[效率算法] [已解决]求助递归创建treeviewitem的问题

  [复制链接]
发表于 2012-12-12 02:56:24 | 显示全部楼层 |阅读模式
本帖最后由 kxing 于 2012-12-12 21:35 编辑

我希望写一个递归函数按照以下次序创建分类。
比如新浪是个大类,里面包含新闻、女性、科技等三个同等级的子分类。
其次,新闻里面在包含:新闻要闻、国内要闻两个相同等级的项目。
女性、科技也和新闻相同……
当然,子分类的层数是无法确定的。
只要在class字段下就为一级分类。

小弟比较笨,望哪位高人指点,不胜感激!
[class]
新浪=新浪
军事频道=http://

[新浪]
新闻=新闻
女性=女性
科技=科技
卡通频道=http://

[新闻]
国际频道=http://
国内频道=http://

[女性]
减肥频道=http://
美容频道=http://

[科技]
数码频道=http://
手机频道=http://
 楼主| 发表于 2012-12-12 03:04:32 | 显示全部楼层
目前做出来后总是一层包含一层,没办法做到同等级的键值创建同等级的分类。
guicreate("treeview",300,300)
$htv=guictrlcreatetreeview(0,0,300,300)
guisetstate()

readinfo("data.ini",$htv)

do
sleep(10)
until guigetmsg()=-3

func readinfo($ini,$htv,$csname="class",$hClass=0)
if not $hClass then $hClass=$htv

$aSec=inireadsection($ini,$csname)
if @error then return false

for $i=1 to $aSec[0][0]
$child=inireadsection($ini,$aSec[$i][0])
if @error then;频道
$hItem=guictrlcreatetreeviewitem($aSec[$i][0],$hClass)
else;子类
$hClass=guictrlcreatetreeviewitem($aSec[$i][0],$hClass)
readinfo($ini,$htv,$aSec[$i][0],$hClass)
endif;频道或分类
next

return true
endfunc;readinfo
发表于 2012-12-12 03:14:44 | 显示全部楼层
没具体东西怎么帮你,说是很容易,无非是循环套循环,不过具体怎么写要看实际东西了
 楼主| 发表于 2012-12-12 03:19:28 | 显示全部楼层
复制上述ini,运行代码即可。
只要上述ini能读取正确就ok啦。
不过,套循环应该是没用的,因为子分类层数不确定,只能递归。
发表于 2012-12-12 03:51:53 | 显示全部楼层
本帖最后由 netegg 于 2012-12-12 06:29 编辑

回复 4# kxing
[au3]_iniread('class')
Func _iniread($i)
        $item = IniReadSection('1.ini', $i)
        For $i = 1 To UBound($item) -1
;                ConsoleWrite($item[$i][1] & @CR)
                If StringInStr($item[$i][1], 'http') Then
                        ConsoleWrite($item[$i][0] &'************'&$item[$i][1] &'***********' & @CR)
                Else
                        ConsoleWrite($item[$i][0] & '++++++++++++++++++++++++'&$item[$i][1] & @CR)
                        _iniread($item[$i][0])
                EndIf
        Next
EndFunc   ;==>_iniread[/au3]
写了个大概思路,结果有问题,不过大体就是这样了
发表于 2012-12-12 11:07:05 | 显示全部楼层
本帖最后由 afan 于 2012-12-12 18:48 编辑

自己写的思路还犯错… 改一下递归的参数即可
GUICreate("treeview", 300, 300)
$htv = GUICtrlCreateTreeView(0, 0, 300, 300)
GUISetState()
readinfo("data.ini", $htv)

Do
        Sleep(10)
Until GUIGetMsg() = -3

Func readinfo($ini, $htv, $csname = "class", $hClass = 0)
        If Not $hClass Then $hClass = $htv
        $aSec = IniReadSection($ini, $csname)
        If @error Then Return False
        For $i = 1 To $aSec[0][0]
                $child = IniReadSection($ini, $aSec[$i][0])
                If @error Then;频道
                        $hItem = GUICtrlCreateTreeViewItem($aSec[$i][0], $hClass)
                Else;子类
                        $hClass1 = GUICtrlCreateTreeViewItem($aSec[$i][0], $hClass)
                        readinfo($ini, $hClass, $aSec[$i][0], $hClass1)
                EndIf;频道或分类
        Next
        Return True
EndFunc   ;==>readinfo

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?加入

×
 楼主| 发表于 2012-12-12 21:35:32 | 显示全部楼层
回复 6# afan

嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!!
发表于 2012-12-12 21:36:55 | 显示全部楼层
回复  afan

嘿嘿,写糊涂了。只差一句。
感谢afan和蛋兄了!!!
kxing 发表于 2012-12-12 21:35



    又错了,是两句: 19, 20
 楼主| 发表于 2012-12-13 21:23:43 | 显示全部楼层
我晕,两句,也是一个参数...
您需要登录后才可以回帖 登录 | 加入

本版积分规则

QQ|手机版|小黑屋|AUTOIT CN ( 鲁ICP备19019924号-1 )谷歌 百度

GMT+8, 2024-11-18 08:25 , Processed in 0.093502 second(s), 24 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表