love5173 发表于 2011-4-20 00:10:15

关于删除重复行[已解决]

本帖最后由 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的效率这么低下呢?
这个命令耗时在什么地方?

3mile 发表于 2011-4-20 00:44:19

打个比方:相当于在一万个人里找相同的人.
代码1:先拖一个人出来,首先检查档案库=>如果没有建立档案,立即建立.如果已有档案,斩,此人消失.复杂程度:1
代码2:先拖一个人出来,在一万个人里找一遍,如果有相同的人,斩一个,此人消失.复杂程度10000

dyd 发表于 2011-4-20 07:53:34

托下来学习学习

asdasdasd 发表于 2011-4-20 20:34:30

其实,有些很经典的算法你们一定要会的,象此类问题,用折半法啊

netegg 发表于 2011-4-20 20:49:46

既然读到数组了,直接用_arrayunique不就行了

love5173 发表于 2011-4-20 23:02:02

回复 5# netegg
谢谢

3mile 发表于 2011-4-25 16:14:07

其实,有些很经典的算法你们一定要会的,象此类问题,用折半法啊
asdasdasd 发表于 2011-4-20 20:34 http://www.autoitx.com/images/common/back.gif
折半法?
无序数怎么用折半法。
页: [1]
查看完整版本: 关于删除重复行[已解决]