【已解决】请教对50万行数据的高效去重方法。
本帖最后由 bhwhui 于 2014-4-15 22:16 编辑附件为50万行(非随机生成)文本文件,用了数组 _arrayuniqe 命令,数据库(Access )非Ado命令去重,真是晕菜,睡了1个小时过来,竟然还没弄完,只能中断了,这些方法在实际中都不能用,求高效算法。谢谢。 用我在该贴的回复 http://www.autoitx.com/thread-44036-1-2.html 正则替换方式试试
从50万行数据查找并删除了重复数据2千多行,本机耗时约2分钟。 本帖最后由 bhwhui 于 2014-4-15 16:51 编辑
晕菜啊,对正则不熟悉啊,正则还能这样用?
现在将就的方法,先数组排序,逐个去重,好像快些了。 $dic=ObjCreate("scripting.dictionary")
If Not IsObj($dic) Then
MsgBox(0,"错误","创建对象失败!",5)
Exit 0
EndIf
$str=FileRead(@ScriptDir&"\file_v.txt")
$arr=StringSplit($str,@CRLF,1)
For $n=1 To $arr
$dic($arr[$n])=""
Next
$arr=$dic.keys
$str=""
For $n=0 To UBound($arr)-1
$str&=$arr[$n]&@CRLF
Next
FileWrite(@ScriptDir&"\result.txt",$str)这个也可以试下 回复 4# kevinch
我想请教kevinch很久了。
请问哪里有au3中字典用法的说明档之类的资料?我想系统学习下。 回复 4# kevinch
这个不错,30多秒,学习了 回复 5# MaGiCmAn
看vb的就可以了,其实字典对象没多少属性和方法 本帖最后由 bhwhui 于 2014-4-15 22:11 编辑
等会我都来试试,报告结果:
1:数据库方式(Access,非ADO方式,排序后1个个检索),时间未知,1个小时后等不及了,关掉了。
2:数组方式(_arrayuniqe排序后1个个分析),约40分钟。 没有用Querylike,估计更慢。
3:正则表达式方式:3.345秒(4核)
4:dic字典方式: 18.41秒(4核)
呵呵,自己赶时间出结果,没有用到Access(Ado) 多重检索的语句(自己数据库实例用的少,网上例子没那么多时间搞明白)就没测了,会不会有惊喜呢?
谢谢各位的帮助,谢谢。 正则代码:
$rfile = FileOpen("d:\!temp1\file_v.txt", 0)
$wfile = FileOpen("d:\!temp1\result2.txt", 2)
$str=FileRead($rfile)
;MsgBox(0, '原字符串', $Str)
$sRE = StringRegExpReplace($str, '(?m)(^\V+)(?:\s*\v+)(?=[^\1]*\1\s*(?=\v|$))', '')
FileWrite($wfile,$str) 字典方式代码:
$dic=ObjCreate("scripting.dictionary")
If Not IsObj($dic) Then
MsgBox(0,"错误","创建对象失败!",5)
Exit 0
EndIf
$rfile = FileOpen("d:\!temp1\file_v.txt", 0)
$wfile = FileOpen("d:\!temp1\result.txt", 2)
$str=FileRead($rfile)
;MsgBox(0,"",$str)
$arr=StringSplit($str,@CRLF,1)
For $n=1 To $arr
$dic($arr[$n])=""
Next
$arr=$dic.keys
$str=""
For $n=0 To UBound($arr)-1
$str&=$arr[$n]&@CRLF
Next
FileWrite($wfile,$str) 大家都是高手啊!赞 回复 7# kevinch
谢谢指教! 本帖最后由 bhwhui 于 2014-4-22 23:32 编辑
正则去重方法有遗漏,请高手改正........ 学习了,原来字典对象这么好用啊! 回复 7# kevinch
使用字典法,效率很高,感谢分享。
页:
[1]