10月272014
高效的删除重复行,使用Dictionary对象
#include <File.au3>
#include <array.au3>
;示例
$begin = TimerInit()
Local $arr
_FileReadToArray("111.txt", $arr)
$new_arr = ArrayUnique($arr)
FileWrite('重复检查结果.txt', _ArrayToString($new_arr, @CRLF) & @CRLF)
ShellExecute('重复检查结果.txt')
$dif = TimerDiff($begin)
MsgBox(0, "时间差,这个计时的精度比sleep高", $dif)
;END
Func ArrayUnique($aArray, $iBase = 0, $oBase = 0, $iCase = 0)
If Not IsArray($aArray) Then Return SetError(1, 0, 0)
If UBound($aArray, 0) > 2 Then Return SetError(2, 0, 0)
Local $oD = ObjCreate('Scripting.Dictionary')
If @error Then Return SetError(4, 0, 0)
Local $dim2 = UBound($aArray, 2)
Local $temp[UBound($aArray)]
If $dim2 Then ;2D array
Local $dim1 = UBound($aArray, 1), $aUnique[$dim1][$dim2], $j
For $i = 0 To $dim1 - 1
If Not $oD.Exists($aArray[$i][0]) Then
$oD.Add($aArray[$i][0], 0)
$aUnique[$j][0] = $aArray[$i][0]
$aUnique[$j][1] = $aArray[$i][1]
$j += 1
Else
If Not $oD.item($aArray[$i][0]) = $aArray[$i][1] Then $aUnique[$j - 1][1] = $aArray[$i][1]
EndIf
Next
ReDim $aUnique[$j][2]
Else ;1D array
For $i = 1 To UBound($aArray) - 1
If Not $oD.Exists($aArray[$i]) Then
$oD.Add($aArray[$i], $i)
$temp[$i] = $aArray[$i]
Else ;这里可以 列出 那一行与那一行相同
$temp[$i] = $i & "行与" & $oD.item($aArray[$i]) & "行相同 ----" & $aArray[$i]
EndIf
Next
Local $aUnique = $oD.Keys()
EndIf
$oD.RemoveAll
$oD = ""
Return $temp
EndFunc ;==>ArrayUnique
传送门: >>Dictionary对象说明<<
此UDF转自 ACN论坛
本文固定链接: http://jianyiit.com/?post=11
扫描二维码,在手机上阅读
发表评论
木有头像就木JJ啦!还木有头像吗?点这里申请属于你的个性Gravatar头像吧!