flymouth
发表于 2010-8-17 07:42:26
回复 12# afan
前两级基本上是等长的,只有少量的有三个字。等我整理完了放上来afan超版再看看吧。
weiyun
发表于 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 = [[$Combo1, $level1],[$Combo2, $level2],[$Combo3, $value]]
id:要设置的ControlID
返回值:
成功:
非最后一级:True
最后一级:键值对数组
result键
result值若未查到为空
失败
False
flymouth
发表于 2010-8-17 21:08:24
非常非常感谢,这个正是想象中的结果,超乎我想象中的解决方法。
得好好的拜读代码了!
afan
发表于 2010-8-17 21:48:59
回复 18# flymouth
貌似你把问题想得太复杂了,整理个txt文档那么久…
你应该考虑从原始文档着手,分析理想的切入点,再考虑代码。不然先这么费时费力的整理几千条数据有浪费AutoIt的表情之嫌……
并且,就算需要整理成ini文件,也可以用代码完成。
如果你早把原始文档传上来肯定早就解决了。
flymouth
发表于 2010-8-18 08:08:33
回复 19# afan
代码来了。
,
实在不好意思,白天单位上只有内网,不能上互联网,只能晚上回来抽空上会网(孩子小,得照看孩子)。还请afan超版谅解。同时再次感谢afan超版以及各位的赐教了。
newuser
发表于 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安全卫士的木马防火墙,这也是国内唯一一款可以全面拦截该木马攻击的安全软件。”
afan
发表于 2010-8-18 11:20:46
回复afan
老大,打个岔,可以吗?有很多TXT文件,他们的内容其实很少,最多也就2、3页,但都不是一屏能看到的 ...
newuser 发表于 2010-8-18 10:00 http://www.autoitx.com/images/common/back.gif
这个问题请开新帖讨论,并说明在哪里显示
afan
发表于 2010-8-18 11:25:09
回复afan
代码来了。
,
实在不好意思,白天单位上只有内网,不能上互联网,只能晚上回来抽空上会网( ...
flymouth 发表于 2010-8-18 08:08 http://www.autoitx.com/images/common/back.gif
明明有 89293 条,还说只有几千条……
带孩子辛苦,我理解。况且这天气更要操心
G,man。
发表于 2010-8-18 13:44:57
跟着学习下。
G,man。
发表于 2010-8-18 16:19:20
看不太懂,做个标记。
zcx880517
发表于 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)
EndSwitch
WEnd
3mile
发表于 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, $re)
Next
EndFunc ;==>shen
Func shi()
$shenID = IniReadSection("city.ini", "shen")
For $i = 1 To UBound($shenID) - 1
$cityID = StringLeft($shenID[$i], 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, $re)
Next
Next
EndFunc ;==>shi
Func xian()
$xian = IniReadSection("city.ini", "city")
For $i = 1 To UBound($xian) - 1
$xianID = StringLeft($xian[$i], 4) & "\d{2}0{6}.*"
$xian_temp = StringRegExp($text, $xianID, 3)
;_ArrayDisplay($xian_temp)
$si = StringSplit($xian_temp, ' ')
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, $se, $se)
Next
For $b=0 To UBound($jei)-1
$se=StringSplit($jei[$b],' ')
If $se==$re Then
ContinueLoop
Else
IniWrite("city.ini",$re,$se,$se)
;MsgBox(0,$se,$se)
$juweihui_temp=StringLeft($se,9)&'\d+.*'
$juweihui=StringRegExp($text,$juweihui_temp,3)
;_ArrayDisplay($juweihui)
For $c=1 To UBound($juweihui)-1
$ju=StringSplit($juweihui[$c],' ')
;MsgBox(0,$ju,$ju)
IniWrite("city.ini",$se,$ju,$ju)
Next
EndIf
Next
IniWrite("city.ini",$si,$re,$re)
Next
Next
EndFunc ;==>xian
afan
发表于 2010-8-19 01:54:43
回复 27# 3mile
近9万条,我都看晕了。
LZ也不解释下,如何定义3级。。。
照例子看,这岂止3级
3mile
发表于 2010-8-19 09:15:03
回复 28# afan
就是。
起码有省、市、区、县、镇、街道办、居委会、村委会这几级。
初步分析为37,00,00,0,00,000,前两位是省,第3、4位代表市;5,6位代表区或县,第7位若是1则为镇,为0则为街道办。7,8,9位是镇或街道办代码,最后三位是居委会、村委会。
写起来相当的麻烦。
weiyun
发表于 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 = [[$Combo1, $level1],[$Combo2, $level2],[$Combo3, $value]]
或:
ini文件名和节名用|分割
Dim $listarray = [[$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键
result值若未查到为空
失败
0