找回密码
 加入
搜索
查看: 9432|回复: 34

[AU3基础] 删除重复行速度不堪忍受,求效率算法!(已解决)

[复制链接]
发表于 2019-9-3 13:19:49 | 显示全部楼层 |阅读模式
本帖最后由 gzh888666 于 2019-9-3 19:26 编辑
#include <array.au3>
$file = @ScriptDir & '\题库.txt'
$str = StringRegExp(FileRead($file), '(?m)^\V+', 3)
;_ArrayDisplay($str)
Global $number_delete =0
For $i = 0 To UBound($str) - 1
     
        For $o = $i + 1 To UBound($str) - 1
               
                If _NoStrChongFu($str[$i]) = _NoStrChongFu($str[$o]) And $i<>$o Then
                        _ArrayDelete($str, $o)
                        ReDim $str[UBound($str) + 1]
                        $number_delete += 1
              
                EndIf
        Next
Next
$htxt = FileOpen($file, 2)
For $i = 0 To UBound($str) - 1
        FileWriteLine($htxt, $str[$i])
Next
FileClose($htxt) 
MsgBox(0,"提示","提示:删除题库重复行共 "&$number_delete&" 条。")
Func _NoStrChongFu($string)
        Local $txt = StringRegExpReplace($string, '(?sm)[^\x{4e00}-\x{9fff}]', '$1')
        Return String($txt)
EndFunc   ;==>_NoStrChongFu
将近5000行的文本,用时超过了10分钟,求一个效率算法,主要是中间的for循环太没有效率了。

已解决,效率比较高的应该就是字典了!~感谢zghwelcome的代码,15楼备注了annybaby 的帖子AU3之Script.Dictionary字典对象初探,感兴趣的坛友可以学习。

本帖子中包含更多资源

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

×
发表于 2019-9-3 15:44:51 | 显示全部楼层
游客,如果您要查看本帖隐藏内容请回复

点评

感谢,回家后测试!  发表于 2019-9-3 17:10

评分

参与人数 1金钱 +80 贡献 +20 收起 理由
gzh888666 + 80 + 20 速度不知道高到哪里去了,感谢!

查看全部评分

发表于 2019-9-3 13:36:47 | 显示全部楼层
传个范文或片段字符串
 楼主| 发表于 2019-9-3 13:45:16 | 显示全部楼层
afan 发表于 2019-9-3 13:36
传个范文或片段字符串

好的,已传题库文件!
发表于 2019-9-3 14:01:12 | 显示全部楼层
你这个只要行中的中文一样就算相同? 所以先要去除非中文字再比对?
发表于 2019-9-3 14:22:31 | 显示全部楼层
如果不是大量处理文本的话,使用 EditPlus 几秒钟内的事!
菜单 -> 工具 -> 排序 -> [v]删除重复值 -> [v]按数字排序
发表于 2019-9-3 15:31:04 | 显示全部楼层
简直是灾难性的对比算法
 楼主| 发表于 2019-9-3 17:09:13 | 显示全部楼层
afan 发表于 2019-9-3 14:01
你这个只要行中的中文一样就算相同? 所以先要去除非中文字再比对?

是的,题库更新后会有很多重复的语句,比如123.中国(副科)级 和 36.中国【副科】级也算是重复行。
发表于 2019-9-3 17:34:22 | 显示全部楼层
gzh888666 发表于 2019-9-3 17:09
是的,题库更新后会有很多重复的语句,比如123.中国(副科)级 和 36.中国【副科】级也算是重复行。

那这样快不起来,需要循环导入导出,我这也差不多要5秒
 楼主| 发表于 2019-9-3 18:30:01 | 显示全部楼层
本帖最后由 gzh888666 于 2019-9-3 18:31 编辑
afan 发表于 2019-9-3 17:34
那这样快不起来,需要循环导入导出,我这也差不多要5秒

5秒钟已经不知道高到哪里去了!代码给我学习一下!包括zghwelcome 的源码也是速度飞起!膜拜
 楼主| 发表于 2019-9-3 18:36:39 | 显示全部楼层
chishingchan 发表于 2019-9-3 14:22
如果不是大量处理文本的话,使用 EditPlus 几秒钟内的事!
菜单 -> 工具 -> 排序 -> [v]删除重复值 -> [v] ...

感谢回复,上网查了一下是个文本编辑器,有时间研究一下EditPlus,我也是业余学AU3的,没有什么编程基础,算法什么的不会,也是给自己个学习算法的锻炼。
发表于 2019-9-3 18:37:52 | 显示全部楼层
gzh888666 发表于 2019-9-3 18:30
5秒钟已经不知道高到哪里去了!代码给我学习一下!包括zghwelcome 的源码也是速度飞起!膜拜

用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这
发表于 2019-9-3 18:39:48 | 显示全部楼层
gzh888666 发表于 2019-9-3 18:36
感谢回复,上网查了一下是个文本编辑器,有时间研究一下EditPlus,我也是业余学AU3的,没有什么编程基础 ...

你这要先行处理中文字符,肯定用不上
 楼主| 发表于 2019-9-3 19:01:52 | 显示全部楼层
afan 发表于 2019-9-3 18:37
用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这

zghwelcome的应该就是字典,奈何目前还看不懂ObjCreate('Scripting.Dictionary')。
 楼主| 发表于 2019-9-3 19:12:15 | 显示全部楼层
afan 发表于 2019-9-3 18:37
用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这

http://www.autoitx.com/forum.php ... amp;fromuid=7652266
备注:annybaby 的帖子AU3之Script.Dictionary字典对象初探,感谢大神们的教程。
您需要登录后才可以回帖 登录 | 加入

本版积分规则

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

GMT+8, 2024-4-26 04:35 , Processed in 0.082188 second(s), 22 queries .

Powered by Discuz! X3.5 Licensed

© 2001-2024 Discuz! Team.

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