找回密码
 加入
搜索
楼主: flymouth

[AU3基础] 求教关于三级联动组合下拉框

 火... [复制链接]
 楼主| 发表于 2010-8-17 07:42:26 | 显示全部楼层
回复 12# afan


  前两级基本上是等长的,只有少量的有三个字。等我整理完了放上来afan超版再看看吧。
发表于 2010-8-17 11:25:39 | 显示全部楼层
本帖最后由 weiyun 于 2010-8-17 11:33 编辑

代码太长,上传附件,用ini配置文件,需设置二数组关联,理论上可以实现N级联动。
说明:
ComboSet($levelarray, $id = 0)
参数:
levelarray:二维数组
设置方法
$level1 = IniReadSection("Data.ini", "Level1")
$level2 = IniReadSection("Data.ini", "Level2")
$value = IniReadSection("Data.ini", "Value")
Dim $listarray[3][2] = [[$Combo1, $level1],[$Combo2, $level2],[$Combo3, $value]]
id:要设置的ControlID
返回值:
成功:
非最后一级:True
最后一级:键值对数组
result[0]键
result[1]值若未查到为空
失败
False

本帖子中包含更多资源

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

×

评分

参与人数 2金钱 +40 收起 理由
flymouth + 20
afan + 20

查看全部评分

 楼主| 发表于 2010-8-17 21:08:24 | 显示全部楼层
非常非常感谢,这个正是想象中的结果,超乎我想象中的解决方法。
得好好的拜读代码了!
发表于 2010-8-17 21:48:59 | 显示全部楼层
回复 18# flymouth


    貌似你把问题想得太复杂了,整理个txt文档那么久…
你应该考虑从原始文档着手,分析理想的切入点,再考虑代码。不然先这么费时费力的整理几千条数据有浪费AutoIt的表情之嫌……
并且,就算需要整理成ini文件,也可以用代码完成。
如果你早把原始文档传上来肯定早就解决了。
 楼主| 发表于 2010-8-18 08:08:33 | 显示全部楼层
回复 19# afan
代码来了。

实在不好意思,白天单位上只有内网,不能上互联网,只能晚上回来抽空上会网(孩子小,得照看孩子)。还请afan超版谅解。同时再次感谢afan超版以及各位的赐教了。

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +10 收起 理由
yb980 + 10 实在强大,辛苦

查看全部评分

发表于 2010-8-18 10:00:26 | 显示全部楼层
本帖最后由 newuser 于 2010-8-18 10:01 编辑

回复 19# afan
老大,打个岔,可以吗?有很多TXT文件,他们的内容其实很少,最多也就2、3页,但都不是一屏能看到的,需要手动调整滚动条才能看到全部内容,能不能对他们进行自动整理,让他们在一屏之内全部看到,或只保留垂直滚动条来查看他们的内容?
TXT内容基本形式:
“假面”木马化身快捷方式 可绕过绝大多数安全软件
来源:360安全中心  发布日期:2010-07-17  已有194条评论   我要评论

  360安全中心7月17日发布橙色安全警报称,微软刚刚曝出的最新快捷方式自动执行0day漏洞已经被木马团伙大规模利用。一款名为“假面”的木马盗用了知名声卡厂商Realtek的数字签名,轻松绕过并破坏市面上绝大多数主流安全软件后,通过U盘、网页下载等方式利用该0day漏洞疯狂传播。对此,360安全卫士已紧急升级程序,现可全面拦截、一键查杀“假面”木马。

  据360安全专家石晓虹博士介绍,微软快捷方式自动执行漏洞是几天前刚刚被曝出的0day漏洞,这个漏洞可使一个正常的快捷方式中包含一段可执行代码,影响所有WindowsXP/Vista/Win7平台。

  “‘假面’木马的厉害之处在于把自己伪装成IE、淘宝、游戏等任意程序的快捷方式,就像戴着假面具一样不易被人发现。而当这个躲在面具后面的木马被下载到文件夹或者桌面时,甚至不需要你点击,就可自动运行。除此之外,它还给自己打上了国外著名声卡厂商Realtek被外泄的数字签名,因而可以轻易骗过并破坏市面上绝大多数安全软件。也就是说,哪怕你没有点击该木马化身的快捷方式,哪怕你的电脑开着安全软件,你也依然会中招。”石晓虹说:“一旦中招后,不仅会弹出乱七八糟的广告网页,你的网游、网银帐号,甚至个人隐私都极有可能被盗走。”

  更为可怕的是,由于“假面”木马会自动加载带有数字签名的恶意驱动,因此极易通过U盘进行自我传播,这也加剧了该木马的进一步蔓延。“用户插入U盘后,如果开启了U盘自动运行,或者仅仅浏览U盘上的文件,就会感染该木马。一旦感染,即使手动将木马程序清除,重启后木马仍会复活。”石晓虹博士建议:“用户在使用U盘时可以暂时关闭自动播放功能,可有效防止木马的自动运行,同时开启360安全卫士的木马防火墙,这也是国内唯一一款可以全面拦截该木马攻击的安全软件。”
发表于 2010-8-18 11:20:46 | 显示全部楼层
回复  afan
老大,打个岔,可以吗?有很多TXT文件,他们的内容其实很少,最多也就2、3页,但都不是一屏能看到的 ...
newuser 发表于 2010-8-18 10:00



    这个问题请开新帖讨论,并说明在哪里显示
发表于 2010-8-18 11:25:09 | 显示全部楼层
回复  afan
代码来了。

实在不好意思,白天单位上只有内网,不能上互联网,只能晚上回来抽空上会网( ...
flymouth 发表于 2010-8-18 08:08


明明有 89293 条,还说只有几千条……
带孩子辛苦,我理解。况且这天气更要操心
发表于 2010-8-18 13:44:57 | 显示全部楼层
跟着学习下。
发表于 2010-8-18 16:19:20 | 显示全部楼层
看不太懂,做个标记。
发表于 2010-8-18 16:49:52 | 显示全部楼层
本帖最后由 zcx880517 于 2010-8-18 16:54 编辑

来凑个热闹。。
#include <ComboConstants.au3>
#include <GUIConstantsEx.au3>
#include <WindowsConstants.au3>

#Region ### START Koda GUI section ### Form=
;Local $Str = FileRead('test.txt')
Local $Str = _
                '济南市中大观园        3701001' & @CRLF & _
                '济南市中经七路        3701002' & @CRLF & _
                '济南市中六里山        3701003' & @CRLF & _
                '济南市中七里山        3701004' & @CRLF & _
                '济南市中二七村        3701005' & @CRLF & _
                '济南市中玉函路        3701006' & @CRLF & _
                '青岛市南金湖路        3702001' & @CRLF & _
                '青岛市南中山路        3702002' & @CRLF & _
                '青岛市a江苏路        3702003' & @CRLF & _
                '青岛市a八大关        3702004' & @CRLF & _
                '青岛市b八大湖        3702005' & @CRLF & _
                '青岛市b湛山        3702006' & @CRLF & _
                '青岛市b八大峡a        3702007'
                                
$Form1 = GUICreate("级联菜单", 180, 143, -1, -1)
$button = GUICtrlCreateButton("读取", 50,100,80,30)
$Combo1 = GUICtrlCreateCombo("", 26, 8, 137, 25)
GUICtrlSetData(-1, "请选择...|济南|青岛", "请选择...")
$Combo2 = GUICtrlCreateCombo("", 26, 39, 137, 25)
GUISetState(@SW_SHOW)
$combo3 = GUICtrlCreateCombo("",26,70,137,25)
GUISetState(@SW_SHOW)
#EndRegion ### END Koda GUI section ###

While 1
        $nMsg = GUIGetMsg()
        Switch $nMsg
                Case $GUI_EVENT_CLOSE
                        Exit
                Case $Combo1
                        Switch GUICtrlRead($Combo1)
                                                            Case "请选择..."
                                        GUICtrlSetData($Combo2, "")
                                        GUICtrlSetData($Combo2, "", "")
                       GUICtrlSetData($combo3, "", "")
                                Case "济南"
                                        GUICtrlSetData($Combo2, "")
                                        GUICtrlSetData($Combo2, "市中|历下|天桥|槐荫", "")
                                Case "青岛"
                                        GUICtrlSetData($Combo2, "")
                                        GUICtrlSetData($Combo2, "市南|市北|李沧|城阳", "")
                        GUICtrlSetData($combo3, "", "")
                EndSwitch
        Case $Combo2
                      Switch GUICtrlRead($Combo2)                
                      Case "市中"
                        GUICtrlSetData($combo3,"")
                        GUICtrlSetData($combo3,"大观园|经七路|六里山|七里山|二七新村|玉函路","")
                     Case "历下"
                        GUICtrlSetData($combo3,"")
                        GUICtrlSetData($combo3,"大明湖|解放路|轻骑路|趵突泉|司里街","")
                     Case "天桥"
                        GUICtrlSetData($combo3,"")
                        GUICtrlSetData($combo3,"无","无")
                     Case "槐荫"
                       GUICtrlSetData($combo3,"")
                       GUICtrlSetData($combo3,"无","无")
                    Case "市南"
                       GUICtrlSetData($combo3,"")
                       GUICtrlSetData($combo3,"金湖路|中山路|江苏路|八大关|八大湖|湛山路|八大峡","")        
                    Case "市北"
                       GUICtrlSetData($combo3,"")
                       GUICtrlSetData($combo3,"登州路|冠县路|热河路|华阳路|延安路","")        
                    Case "李沧"
                      GUICtrlSetData($combo3,"")
                      GUICtrlSetData($combo3,"无","无")
                    Case "城阳"
                                      GUICtrlSetData($combo3,"")
                      GUICtrlSetData($combo3,"无","无")                                                                           
                   EndSwitch
                   Case $Button
                                     If GUICtrlRead($Combo1) = '请选择' Then ContinueLoop
                                     $tmp = GUICtrlRead($Combo1) & GUICtrlRead($Combo2) & GUICtrlRead($Combo3)
                                     $var = StringRegExp($Str, $tmp & '\h+(\d+)', 3)
                                     If Not @error Then MsgBox(64, '数据', '单位名称:' & $tmp & @LF & '单位代码:' & $var[0])
        EndSwitch
WEnd

评分

参与人数 1金钱 +20 收起 理由
afan + 20

查看全部评分

发表于 2010-8-18 23:50:16 | 显示全部楼层
8万多条,分析起来实在很麻烦。
写个东西把它变成标准的INI格式。如有错误请自行修改。
代码执行时间较长,请耐心等待。
#include <array.au3>
Local $shen, $shi, $xian, $xiang, $text

$text = FileRead("村级区划代码.txt")
$text = StringRegExpReplace($text, '\h+', ' ')
$shen = StringRegExp($text, '\d{2}0{10}.*', 3)
shen()
shi()
xian()

Func shen()
        For $i = 0 To UBound($shen) - 1
                $re = StringSplit($shen[$i], " ")
                IniWrite("city.ini", "shen", $re[2], $re[1])
        Next
EndFunc   ;==>shen

Func shi()
        $shenID = IniReadSection("city.ini", "shen")

        For $i = 1 To UBound($shenID) - 1
                $cityID = StringLeft($shenID[$i][1], 2) & "\d{2}0{8}.*"
                $city = StringRegExp($text, $cityID, 3)
                For $n = 1 To UBound($city) - 1
                        $re = StringSplit($city[$n], ' ')
                        IniWrite("city.ini", "city", $re[2], $re[1])
                Next
        Next
EndFunc   ;==>shi

Func xian()
        $xian = IniReadSection("city.ini", "city")
        For $i = 1 To UBound($xian) - 1
                $xianID = StringLeft($xian[$i][1], 4) & "\d{2}0{6}.*"
                $xian_temp = StringRegExp($text, $xianID, 3)
                ;_ArrayDisplay($xian_temp)
                $si = StringSplit($xian_temp[0], ' ')
                For $n = 1 To UBound($xian_temp) - 1
                        $re = StringSplit($xian_temp[$n], ' ')
                        $zhen_temp = StringLeft($xian_temp[$n], 6) & '1\d{2}0{3}.*'
                        $jei_temp=StringLeft($xian_temp[$n], 6) & '0\d{2}0{3}.*'
                        $zhen = StringRegExp($text, $zhen_temp, 3)
                        $jei=StringRegExp($text, $jei_temp, 3)
                        For $a = 0 To UBound($zhen) - 1
                                $se = StringSplit($zhen[$a], ' ')
                                IniWrite("city.ini", $re[2], $se[2], $se[1])
                        Next
                        
                        For $b=0 To UBound($jei)-1
                                $se=StringSplit($jei[$b],' ')
                                If $se[2]==$re[2] Then
                                        ContinueLoop
                                Else
                                        IniWrite("city.ini",$re[2],$se[2],$se[1])
                                        ;MsgBox(0,$se[2],$se[1])
                                        $juweihui_temp=StringLeft($se[1],9)&'\d+.*'
                                        $juweihui=StringRegExp($text,$juweihui_temp,3)
                                        ;_ArrayDisplay($juweihui)
                                        For $c=1 To UBound($juweihui)-1
                                                $ju=StringSplit($juweihui[$c],' ')
                                                ;MsgBox(0,$ju[1],$ju[2])
                                                IniWrite("city.ini",$se[2],$ju[2],$ju[1])
                                        Next
                                EndIf
                        Next
                        IniWrite("city.ini",$si[2],$re[2],$re[1])
                Next
        Next
EndFunc   ;==>xian

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

发表于 2010-8-19 01:54:43 | 显示全部楼层
回复 27# 3mile


    近9万条,我都看晕了。
LZ也不解释下,如何定义3级。。。
照例子看,这岂止3级
发表于 2010-8-19 09:15:03 | 显示全部楼层
回复 28# afan
就是。
起码有省、市、区、县、镇、街道办、居委会、村委会这几级。
初步分析为37,00,00,0,00,000,前两位是省,第3、4位代表市;5,6位代表区或县,第7位若是1则为镇,为0则为街道办。7,8,9位是镇或街道办代码,最后三位是居委会、村委会。
写起来相当的麻烦。

评分

参与人数 1金钱 +30 收起 理由
afan + 30 辛苦了

查看全部评分

发表于 2010-8-19 13:21:33 | 显示全部楼层
更新版本
1.ToIni将那个文本转化为Ini
2.支持内存模式和Ini模式
3.Comboset不能查询结果,应使用ComboGet
4.似乎内存模式中使用的_arraySearch中文支持有问题,有时查不到结果
说明:
ComboSet($levelarray, $id = 0)
参数:
levelarray:二维数组
设置方法
$level1 = IniReadSection("Data.ini", "Level1")
$level2 = IniReadSection("Data.ini", "Level2")
$value = IniReadSection("Data.ini", "Value")
Dim $listarray[3][2] = [[$Combo1, $level1],[$Combo2, $level2],[$Combo3, $value]]
或:
ini文件名和节名用|分割
Dim $listarray[5][2] = [[$Combo1, "Data.ini|Level1"],[$Combo2, "Data.ini|Level2"],[$Combo3, "Data.ini|Level3"],[$Combo4, "Data.ini|Level4"],[$Combo5, "Data1.ini|Value"]]
id:要设置的ControlID
返回值:
成功:
True
失败
False
ComboGet($levelarray)
返回值:
成功:
键值对数组
result[0]键
result[1]值若未查到为空
失败
0

本帖子中包含更多资源

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

×

评分

参与人数 1金钱 +30 收起 理由
afan + 30

查看全部评分

您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-11-15 07:32 , Processed in 0.123520 second(s), 19 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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