找回密码  加入

QQ登录

只需一步,快速开始

AUTOIT CN

搜索
查看: 990|回复: 33

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

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

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

本帖子中包含更多资源

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

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

点评

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

评分

1

查看全部评分

回复 支持 1 反对 0

使用道具 举报

发表于 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, 2019-11-15 03:02 , Processed in 0.093749 second(s), 22 queries .

Powered by Discuz! X3.4 Licensed

© 2001-2017 Comsenz Inc.

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