关于删除重复行[已解决]
本帖最后由 love5173 于 2011-4-20 23:08 编辑相关帖子http://www.autoitx.com/forum.php?mod=viewthread&tid=22107&extra=&page=1
3M的代码#include <File.au3>
$aFile = FileOpenDialog("快速删除重复行",@ScriptDir&"\","文本文件 (*.txt)", 1 + 4)
If @error Then
MsgBox(0,0,"文件未选择",3)
Exit
EndIf
$begin = TimerInit()
Local $str='',$file_array
_FileReadToArray($aFile,$file_array)
;_ArrayDisplay($file_array)
For $i = 1 To UBound($file_array)-1
$temp=$file_array[$i]
If Not IsDeclared($temp) Then
Assign($temp, $i)
$str&=$temp&@CRLF
EndIf
Next
$dif = TimerDiff($begin)
$out_file=StringTrimRight($aFile,4)&'_已完成.txt'
if FileExists($out_file) then FileDelete($out_file)
FileWrite($out_file,$str)
ShellExecute($out_file)
WinWaitActive("")
WinSetTitle("", "", '处理'&UBound($file_array)&'行'&' 用时'&int($dif)&'毫秒')
Exit我修改的#include <File.au3>
$aFile = FileOpenDialog("快速删除重复行",@ScriptDir&"\","文本文件 (*.txt)", 1 + 4)
If @error Then
MsgBox(0,0,"文件未选择",3)
Exit
EndIf
$begin = TimerInit()
Local $str='',$file_array
_FileReadToArray($aFile,$file_array)
;_ArrayDisplay($file_array)
For $i = 1 To UBound($file_array)-1
;$temp=$file_array[$i]
If Not StringInStr($str,$file_array[$i],1) Then
; Assign($temp, $i)
$str&=$file_array[$i]&@CRLF
EndIf
Next
$dif = TimerDiff($begin)
$out_file=StringTrimRight($aFile,4)&'_已完成.txt'
if FileExists($out_file) then FileDelete($out_file)
FileWrite($out_file,$str)
ShellExecute($out_file)
WinWaitActive("")
WinSetTitle("", "", '处理'&UBound($file_array)&'行'&' 用时'&int($dif)&'毫秒')
Exit我只是想知道为什么StringInStr的效率这么低下呢?
这个命令耗时在什么地方? 打个比方:相当于在一万个人里找相同的人.
代码1:先拖一个人出来,首先检查档案库=>如果没有建立档案,立即建立.如果已有档案,斩,此人消失.复杂程度:1
代码2:先拖一个人出来,在一万个人里找一遍,如果有相同的人,斩一个,此人消失.复杂程度10000 托下来学习学习 其实,有些很经典的算法你们一定要会的,象此类问题,用折半法啊 既然读到数组了,直接用_arrayunique不就行了 回复 5# netegg
谢谢 其实,有些很经典的算法你们一定要会的,象此类问题,用折半法啊
asdasdasd 发表于 2011-4-20 20:34 http://www.autoitx.com/images/common/back.gif
折半法?
无序数怎么用折半法。
页:
[1]