gzh888666 发表于 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
                        $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字典对象初探,感兴趣的坛友可以学习。

zghwelcome 发表于 2019-9-3 15:44:51

**** Hidden Message *****

afan 发表于 2019-9-3 13:36:47

传个范文或片段字符串

gzh888666 发表于 2019-9-3 13:45:16

afan 发表于 2019-9-3 13:36
传个范文或片段字符串

好的,已传题库文件!

afan 发表于 2019-9-3 14:01:12

你这个只要行中的中文一样就算相同? 所以先要去除非中文字再比对?

chishingchan 发表于 2019-9-3 14:22:31

如果不是大量处理文本的话,使用 EditPlus 几秒钟内的事!
菜单 -> 工具 -> 排序 -> 删除重复值 -> 按数字排序

zghwelcome 发表于 2019-9-3 15:31:04

简直是灾难性的对比算法:face (37):

gzh888666 发表于 2019-9-3 17:09:13

afan 发表于 2019-9-3 14:01
你这个只要行中的中文一样就算相同? 所以先要去除非中文字再比对?
是的,题库更新后会有很多重复的语句,比如123.中国(副科)级 和 36.中国【副科】级也算是重复行。

afan 发表于 2019-9-3 17:34:22

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

那这样快不起来,需要循环导入导出,我这也差不多要5秒

gzh888666 发表于 2019-9-3 18:30:01

本帖最后由 gzh888666 于 2019-9-3 18:31 编辑

afan 发表于 2019-9-3 17:34
那这样快不起来,需要循环导入导出,我这也差不多要5秒
5秒钟已经不知道高到哪里去了!代码给我学习一下!包括zghwelcome 的源码也是速度飞起!膜拜

gzh888666 发表于 2019-9-3 18:36:39

chishingchan 发表于 2019-9-3 14:22
如果不是大量处理文本的话,使用 EditPlus 几秒钟内的事!
菜单 -> 工具 -> 排序 -> 删除重复值 -> ...

感谢回复,上网查了一下是个文本编辑器,有时间研究一下EditPlus,我也是业余学AU3的,没有什么编程基础,算法什么的不会,也是给自己个学习算法的锻炼。

afan 发表于 2019-9-3 18:37:52

gzh888666 发表于 2019-9-3 18:30
5秒钟已经不知道高到哪里去了!代码给我学习一下!包括zghwelcome 的源码也是速度飞起!膜拜
用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这

afan 发表于 2019-9-3 18:39:48

gzh888666 发表于 2019-9-3 18:36
感谢回复,上网查了一下是个文本编辑器,有时间研究一下EditPlus,我也是业余学AU3的,没有什么编程基础 ...

你这要先行处理中文字符,肯定用不上

gzh888666 发表于 2019-9-3 19:01:52

afan 发表于 2019-9-3 18:37
用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这

zghwelcome的应该就是字典,奈何目前还看不懂ObjCreate('Scripting.Dictionary')。

gzh888666 发表于 2019-9-3 19:12:15

afan 发表于 2019-9-3 18:37
用字典方便多了也快多了,这里正则不适合,快不起来字典最大的用途和优势就体现在这

http://www.autoitx.com/forum.php?mod=viewthread&tid=36597&fromuid=7652266
备注:annybaby 的帖子AU3之Script.Dictionary字典对象初探,感谢大神们的教程。
页: [1] 2 3
查看完整版本: 删除重复行速度不堪忍受,求效率算法!(已解决)