; #FUNCTION# ;============================================================================================= ; ; Name...........: ArraySorting_FindDuplicate_Delete ; Description ...: Findet Elemente deren Name mehrmals vorkommt ; Syntax.........: ArraySorting_FindDuplicate_Delete($avArray[, $Abst [, $Start [, $End [, $Rein [, $Sort ]]]]]) ; ; Parameters ....: $avArray - Array1D ; $Abst - Wenn auf 1 gesetzt, sortieren absteigend ; $Start - Index des Array beim Start ; $End - Index der Array beim Ende ; $Rein - Wenn auf 1 gesetzt, Bei der ausgabe alle Doppelte Eldemente Entfernen ; $Sort - Wenn auf 1 gesetzt, Nur Sortiert ausgeben in Kombination mit $Abst ist möglich ; ; Return values .: Erfolg - 1D-Array mit den Doppelten Elemente o. 1D-Array ohne den Doppelten Elemente o. ; 1D-Array nur Sortiert wenn 1=aubsteigend ; ; Fehler - Gibt -1 zurück und setzt @error: ; |1 - Wenn keine Array ; |2 - Wenn Start größer als Ende ; |3 - Wnn kein 1D-Array ; ; Author ........: Kleiner27 ; Modified.......: ; Remarks .......: ; Related .......: _Sort() ; Link ..........; ; Example .......; ; ; Integriert u. Modified; _ArrayReverse() u. _ArraySort()-1D ; ; ; [ created by Kleiner27 www.AutoIT.de ] 01.05.2010 ; ;========================================================================================================= Func ArraySorting_FindDuplicate_Delete(ByRef $avArray, $Abst = 0, $Start = 0, $End = 0, $Rein = 0, $Sort = 0) If Not IsArray($avArray) Then Return SetError(1, 0, -1) If ($Start > $End) Then Return SetError(1, 2, -1) If (UBound($avArray, 0) <> 1) Then Return SetError(1, 3, -1) Local $Start_2 = $Start Local $Tmp, $Tmp_Array, $iSTelle Local $iUB = UBound($avArray) - 1 Local $iDelim = '|', $Delim = '[', $Leer = '' If ($End < 1 Or $End > $iUB) Then $End = $iUB _Sort($avArray, $Start, $End) If ($Abst) Then For $i = $Start_2 To Int(($Start_2 + $iUB - 1) / 2) $Tmp = $avArray[$i] $avArray[$i] = $avArray[$iUB] $avArray[$iUB] = $Tmp $iUB -= 1 Next EndIf If ($Sort) Then Return $avArray For $i = $Start To $End $iSTelle = $Leer For $e = $i To $End If ($avArray[$e] <> $avArray[$i]) Then ExitLoop $iSTelle &= $Delim & $e Next If ($e - $i < 2) Then ContinueLoop $Tmp_Array &= $iDelim & $avArray[$i] & ' ' & $iSTelle $i += ($e - $i - 1) Next If ($Rein) Then If ($Tmp_Array = $Leer) Then Return $avArray $Tmp_Array = StringSplit(StringTrimLeft($Tmp_Array, 1), $Delim) If IsArray($Tmp_Array) Then For $i = 1 To UBound($Tmp_Array) - 1 If (StringIsDigit($Tmp_Array[$i]) = 1) Then $avArray[$Tmp_Array[$i]] = $Leer Next EndIf $Tmp_Array = $Leer If IsString($Tmp_Array) Then For $_i_ In $avArray If ($_i_ > $Leer) Then $Tmp_Array &= $iDelim & $_i_ Next EndIf EndIf If ($Tmp_Array = $Leer) Then Return $avArray $Tmp_Array = StringSplit(StringTrimLeft($Tmp_Array, 1), $iDelim) If IsArray($Tmp_Array) Then For $i = 0 To UBound($Tmp_Array) - 2 $Tmp_Array[$i] = $Tmp_Array[$i + 1] Next ReDim $Tmp_Array[UBound($Tmp_Array) - 1] Return $Tmp_Array EndIf EndFunc ;==>ArraySorting_FindDuplicate_Delete Func _Sort(ByRef $avArray, ByRef $iStart, ByRef $iEnd) Local $Tmp, $K = $iEnd, $G = $iStart Local $oPru = $avArray[Int(($iStart + $iEnd) / 2)] If (($iEnd - $iStart) < 15) Then For $i = $iStart + 1 To $iEnd $Tmp = $avArray[$i] For $e = $i - 1 To $iStart Step -1 If ($Tmp >= $avArray[$e]) Then ExitLoop $avArray[$e + 1] = $avArray[$e] Next $avArray[$e + 1] = $Tmp Next Return (0) EndIf Do While ($avArray[$G] < $oPru) $G += 1 WEnd While ($avArray[$K] > $oPru) $K -= 1 WEnd If ($G <= $K) Then $Tmp = $avArray[$G] $avArray[$G] = $avArray[$K] $avArray[$K] = $Tmp $G += 1 $K -= 1 EndIf Until $G > $K _Sort($avArray, $iStart, $K) _Sort($avArray, $G, $iEnd) EndFunc ;==>_Sort