#include-once #include Func _Array_Display($array, $titre = "") If(StringLen($titre) > 0) Then ConsoleWrite($titre & @CRLF) ConsoleWrite("Array") For $i = 1 To UBound($array, 0) ConsoleWrite("[" & UBound($array, $i) & "]") Next ConsoleWrite(" : [" & @CRLF) Switch UBound($array, 0) Case 0 ConsoleWrite($array & @CRLF) Case 1 _Array_Display1D($array) Case 2 _Array_Display2D($array) Case 3 _Array_Display3D($array) EndSwitch ConsoleWrite("]" & @CRLF) EndFunc Func _Array_Display1D($array) Local $text = "" For $i = 0 To UBound($array, 1)-1 If(IsArray($array[$i])) Then ;~ _Array_Display($array[$i]) $text &= "[ARRAY]" Else $text &= $array[$i] EndIf $text &= ", " Next $text = StringTrimRight($text, 2) & @CRLF ConsoleWrite($text) EndFunc Func _Array_Display2D($array) Local $text = "" For $i = 0 To UBound($array, 1)-1 For $j = 0 To UBound($array, 2)-1 If(IsArray($array[$i][$j])) Then $text &= "[ARRAY]" ;~ _Array_Display($array[$i][$j]) Else $text &= $array[$i][$j] EndIf $text &= ", " Next $text = StringTrimRight($text, 2) & @CRLF Next ConsoleWrite($text) EndFunc Func _Array_Display3D($array) Local $text = "" For $i = 0 To UBound($array, 1)-1 For $j = 0 To UBound($array, 2)-1 For $k = 0 To UBound($array, 3)-1 If(IsArray($array[$i][$j][$k])) Then $text &= "[ARRAY]" ;~ _Array_Display($array[$i][$j][$k]) Else $text &= $array[$i][$j][$k] EndIf $text &= ", " Next $text &= @CRLF Next $text = StringTrimRight($text, 4) & @CRLF & @CRLF Next ConsoleWrite($text) EndFunc Func _ArrayEquals($array1, $array2) Local $equals = True Local $ubound = UBound($array1, 0) If($ubound = UBound($array2, 0)) Then For $i = 0 To $ubound If(UBound($array1, $i) <> UBound($array2, $i)) Then $equals = False ExitLoop EndIf Next If($equals) Then Switch $ubound Case 0 $equals = $array1 = $array2 Case 1 For $i = 0 To UBound($array1, 1)-1 If($array1[$i] <> $array2[$i]) Then $equals = False ExitLoop EndIf Next Case 2 For $i = 0 To UBound($array1, 1)-1 For $j = 0 To UBound($array1, 2)-1 If($array1[$i][$j] <> $array2[$i][$j]) Then $equals = False ExitLoop 2 EndIf Next Next EndSwitch EndIf Else $equals = False EndIf Return $equals EndFunc Func _Array_FindPart2D($array, $search, $start = 0, $element = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If(StringCompare(StringLeft($array[$i][$element], StringLen($search)), $search) = 0) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_Find($array, $search, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If($array[$i] == $search) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_Find2D($array, $search, $element, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_FindDouble2D($array, $search1, $element, $search2, $element2, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search1 And $array[$i][$element2] == $search2) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_FindTriple2D($array, $search1, $element, $search2, $element2, $search3, $element3, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search1 And $array[$i][$element2] == $search2 And $array[$i][$element3] == $search3) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_Find3D($array, $search, $element, $start = 0) Local $indice[2] = [-1, -1] For $i = $start To UBound($array, 1)-1 For $j = 0 To UBound($array, 2)-1 If($array[$i][$j][$element] == $search) Then $indice[0] = $i $indice[1] = $j ExitLoop EndIf Next Next Return $indice EndFunc Func _Array_FindAll($array, $search, $start = 0, $element = 0) Local $retour[1] = [0] Switch UBound($array, 0) Case 1 $retour = _Array_FindAll1D($array, $search, $start) Case 2 $retour = _Array_FindAll2D($array, $search, $start, $element) Case Else Return SetError(4, 0, $retour) EndSwitch Return $retour EndFunc Func _Array_FindAll1D($array, $search, $start = 0) Local $indices[1] = [0] For $i = $start To UBound($array, 1)-1 If($array[$i] == $search) Then $indices[0] += 1 _Array_Add($indices, $i) EndIf Next Return $indices EndFunc ;~ Func _Array_FindAll2D($array, $search, $element, $start = 0) ;~ Local $retour[1][UBound($array, 2)] ;~ $retour[0][0] = 0 ;~ For $i = $start To UBound($array, 1)-1 ;~ If($array[$i][$element] = $search) Then ;~ $retour[0][0] += 1 ;~ ReDim $retour[$retour[0][0]+1][UBound($retour, 2)] ;~ For $j = 0 To UBound($array, 2)-1 ;~ $retour[$retour[0][0]][$j] = $array[$i][$j] ;~ Next ;~ EndIf ;~ Next ;~ Return $retour ;~ EndFunc Func _Array_FindAll2D($array, $search, $start = 0, $element = 0) Local $indices[1] = [0] For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search) Then $indices[0] += 1 _Array_Add($indices, $i) EndIf Next Return $indices EndFunc Func _Array_FindAllByArray2D($array, $arraySearch, $element, $start = 0, $startSearch = 0) Local $retour[1] = [0] For $i = $start To UBound($array, 1)-1 For $j = $startSearch To UBound($arraySearch, 1)-1 If($array[$i][$element] == $arraySearch[$j]) Then $retour[0] += 1 _Array_Add($retour, $i) EndIf Next Next Return $retour EndFunc Func _Array_ExtractAll2D($array, $search, $element, $start = 0) Local $retour[1][UBound($array, 2)] $retour[0][0] = 0 For $i = $start To UBound($array, 1)-1 If($array[$i][$element] = $search) Then $retour[0][0] += 1 ReDim $retour[$retour[0][0]+1][UBound($retour, 2)] For $j = 0 To UBound($array, 2)-1 $retour[$retour[0][0]][$j] = $array[$i][$j] Next EndIf Next Return $retour EndFunc Func _Array_ExtractAllByArray2D($array, $arraySearch, $element, $start = 0, $startSearch = 0) Local $retour[1][UBound($array, 2)] $retour[0][0] = 0 For $i = $start To UBound($array, 1)-1 For $j = $startSearch To UBound($arraySearch, 1)-1 If($array[$i][$element] = $arraySearch[$j]) Then $retour[0][0] += 1 ReDim $retour[$retour[0][0]+1][UBound($retour, 2)] For $j = 0 To UBound($array, 2)-1 $retour[$retour[0][0]][$j] = $array[$i][$j] Next EndIf Next Next Return $retour EndFunc Func _Array_ExtractSubArray($array, $indice = 0) Local $iUBound = UBound($array, 1) - 1 ; Bounds checking If $indice > $iUBound Then Return SetError(3, 0, -1) Local $retour = -1 Switch UBound($array, 0) Case 1 $retour = _Array_ExtractSubArray1D($array, $indice) Case 2 $retour = _Array_ExtractSubArray2D($array, $indice) Case 3 $retour = _Array_ExtractSubArray3D($array, $indice) EndSwitch Return $retour EndFunc Func _Array_ExtractSubArray1D($array, $indice = 0) Return $array[$indice] EndFunc Func _Array_ExtractSubArray2D($array, $indice = 0) Local $retour[UBound($array, 2)] If($indice >= 0 And $indice < UBound($array, 1)) Then For $i = 0 To UBound($array, 2)-1 $retour[$i] = $array[$indice][$i] Next EndIf Return $retour EndFunc Func _Array_ExtractSubArray3D($array, $indice = 0) Local $retour[UBound($array, 2)][UBound($array, 3)] If($indice >= 0 And $indice < UBound($array, 1)) Then For $j = 0 To UBound($array, 2)-1 For $i = 0 To UBound($array, 3)-1 $retour[$j][$i] = $array[$indice][$j][$i] Next Next EndIf Return $retour EndFunc Func _Array_AddAllUnique(ByRef $array, $add) _Array_AddAll($array, $add) $array = _ArrayUnique($array) _Array_Delete($array, 0) EndFunc Func _Array_AddAll(ByRef $array, $add, $indice = -1) Local $indiceTemp = $indice For $i = 0 To UBound($add, 1)-1 ;~ _Array_Display(_Array_ExtractSubArray($add, $i)) _Array_Add($array, _Array_ExtractSubArray($add, $i), $indiceTemp) If($indiceTemp >= 0) Then $indiceTemp += 1 EndIf Next EndFunc Func _Array_Add(ByRef $array, $add, $indice = -1) Local $iUBound = UBound($array, 1) ; Bounds checking If $indice > $iUBound Then Return SetError(3, 0, -1) Local $retour = -1 Switch UBound($array, 0) Case 1 $retour = _Array_Add1D($array, $add, $indice) Case 2 $retour = _Array_Add2D($array, $add, $indice) Case 3 $retour = _Array_Add3D($array, $add, $indice) EndSwitch Return $retour EndFunc Func _Array_Add1D(ByRef $array, $add, $indice = -1) ReDim $array[UBound($array, 1)+1] If($indice < 0) Then $indice = UBound($array, 1)-1 EndIf For $i = UBound($array, 1)-2 To $indice Step -1 $array[$i+1] = $array[$i] Next $array[$indice] = $add Return $indice EndFunc Func _Array_Add2D(ByRef $array, $add, $indice = -1) ReDim $array[UBound($array, 1)+1][UBound($array, 2)] If($indice < 0) Then $indice = UBound($array, 1)-1 EndIf For $i = UBound($array, 1)-2 To $indice Step -1 For $j = 0 To UBound($array, 2)-1 $array[$i+1][$j] = $array[$i][$j] Next Next _Array_Set2D($array, $add, $indice) Return $indice EndFunc Func _Array_Add3D(ByRef $array, $add, $indice = -1) ReDim $array[UBound($array, 1)+1][UBound($array, 2)][UBound($array, 3)] If($indice < 0) Then $indice = UBound($array, 1)-1 EndIf For $i = UBound($array, 1)-2 To $indice Step -1 For $j = 0 To UBound($array, 2)-1 For $k = 0 To UBound($array, 3)-1 $array[$i+1][$j][$k] = $array[$i][$j][$k] Next Next Next _Array_Set3D($array, $add, $indice) Return $indice EndFunc Func _Array_Set(ByRef $array, $add, $indice = -1) Local $iUBound = UBound($array, 1) - 1 ; Bounds checking If($indice < 0) Then $indice = UBound($array, 1)-1 EndIf If $indice > $iUBound Then Return SetError(3, 0, -1) Switch UBound($array, 0) Case 1 _Array_Set1D($array, $add, $indice) Case 2 _Array_Set2D($array, $add, $indice) Case 3 _Array_Set3D($array, $add, $indice) EndSwitch EndFunc Func _Array_Set1D(ByRef $array, $add, $indice) $array[$indice] = $add EndFunc Func _Array_Set2D(ByRef $array, $add, $indice) If(Not(IsArray($array) And IsArray($add))) Then Return SetError(1, 0, -1) ReDim $add[UBound($array, 2)] For $j = 0 To UBound($array, 2)-1 $array[$indice][$j] = $add[$j] Next EndFunc Func _Array_Set3D(ByRef $array, $add, $indice) ReDim $add[UBound($array, 2)][UBound($array, 3)] For $i = 0 To UBound($array, 2)-1 For $j = 0 To UBound($array, 3)-1 $array[$indice][$i][$j] = $add[$i][$j] Next Next EndFunc ;~ Local $arr[5][2] = [[1, "a"], [2, "b"], [3, ""], [4, "c"], [5, 0]] ;~ Local $arr[5] = ["a", "b", "", "c", 0] ;~ _Array_Display($arr) ;~ _Array_DeleteByValue($arr, "", 0, 1) ;~ _Array_Display($arr) Func _Array_DeleteByValue(ByRef $array, $value, $start = 0, $element = 0) Local $indices = _Array_FindAll($array, $value, $start, $element) For $i = UBound($indices, 1)-1 To 1 Step -1 _Array_Delete($array, $indices[$i]) Next EndFunc Func _Array_DeleteByValues(ByRef $array, $arrayCompare) For $i = 0 To UBound($arrayCompare, 1)-1 _Array_DeleteByValue($array, $arrayCompare[$i]) Next EndFunc Func _Array_Delete(ByRef $array, $indice = -1) If Not IsArray($array) Then Return SetError(1, 0, 0) Local $iUBound = UBound($array, 1) - 1 If $indice > $iUBound Then Return SetError(3, 0, 0) Switch UBound($array, 0) Case 1 _Array_Delete1D($array, $indice) Case 2 _Array_Delete2D($array, $indice) Case Else Return SetError(4, 0, 0) EndSwitch Return $iUBound EndFunc Func _Array_Delete1D(ByRef $array, $indice = -1) Local $moveItem = "" Local $iUBound = UBound($array, 1) - 1 If($indice >= 0) Then $array[$indice] = "" For $i = $indice To $iUBound If($i = $iUBound) Then $moveItem = "" Else $moveItem = $array[$i + 1] EndIf $array[$i] = $moveItem Next EndIf If($iUBound >= 0) Then ReDim $array[$iUBound] EndIf EndFunc Func _Array_Delete2D(ByRef $array, $indice = -1) Local $moveItem = "" Local $iUBound = UBound($array, 1) - 1 Local $iSubMax = UBound($array, 2) - 1 If($indice >= 0) Then For $i = $indice To $iUBound For $j = 0 To $iSubMax If($i = $iUBound) Then $moveItem = "" Else $moveItem = $array[$i + 1][$j] EndIf $array[$i][$j] = $moveItem Next Next EndIf If($iUBound >= 0) Then ReDim $array[$iUBound][$iSubMax + 1] EndIf EndFunc Func _AsArray($v_0 = 0, $v_1 = 0, $v_2 = 0, $v_3 = 0, $v_4 = 0, $v_5 = 0, $v_6 = 0, $v_7 = 0, $v_8 = 0, $v_9 = 0, $v_10 = 0, $v_11 = 0, $v_12 = 0, $v_13 = 0, $v_14 = 0, $v_15 = 0, $v_16 = 0, $v_17 = 0, $v_18 = 0, $v_19 = 0, $v_20 = 0) Local $av_Array[21] = [$v_0, $v_1, $v_2, $v_3, $v_4, $v_5, $v_6, $v_7, $v_8, $v_9, $v_10, $v_11, $v_12, $v_13, $v_14, $v_15, $v_16, $v_17, $v_18, $v_19, $v_20] ReDim $av_Array[@NumParams] Return $av_Array EndFunc Func _Array_DeleteDoublons(ByRef $array, $start = 0, $element = 0) Switch UBound($array, 0) Case 1 _Array_DeleteDoublons1D($array, $start) Case 2 _Array_DeleteDoublons2D($array, $start, $element) Case Else Return SetError(4, 0, 0) EndSwitch EndFunc Func _Array_DeleteDoublons1D(ByRef $array, $start = 0) For $i = UBound($array, 1)-1 To $start Step -1 For $j = $i-1 To $start Step -1 If($array[$i] = $array[$j]) Then _Array_Delete($array, $i) ExitLoop EndIf Next Next EndFunc Func _Array_DeleteDoublons2D(ByRef $array, $start = 0, $element = 0) For $i = UBound($array, 1)-1 To $start Step -1 For $j = $i-1 To $start Step -1 If($array[$i][$element] = $array[$j][$element]) Then _Array_Delete($array, $i) ExitLoop EndIf Next Next EndFunc Func _Array_FromFile($file, $delim1, $delim2, $noBlank = True) Local $array[1][1] Local $contenu = FileRead($file) If($delim1 = @CRLF Or $delim2 = @CRLF) Then $contenu = StringReplace($contenu, @CRLF, @CR) $contenu = StringReplace($contenu, @CR, @LF) If($delim1 = @CRLF) Then $delim1 = @LF EndIf If($delim2 = @CRLF) Then $delim2 = @LF EndIf EndIf Local $temp = StringSplit($contenu, $delim1, 3) ReDim $array[UBound($temp, 1)][UBound($array, 2)] For $j = 0 To UBound($temp, 1)-1 If($j = UBound($temp, 1)-1 And StringLen($temp[$j]) = 0 And $noBlank) Then If(UBound($array, 1) > 0) Then ReDim $array[UBound($array, 1)-1][UBound($array, 2)] EndIf Else Local $tempBis = StringSplit($temp[$j], $delim2, 3) If(UBound($tempBis, 1) > UBound($array, 2)) Then ReDim $array[UBound($array, 1)][UBound($tempBis, 1)] EndIf For $i = 0 To UBound($tempBis, 1)-1 $array[$j][$i] = $tempBis[$i] Next EndIf Next Return $array EndFunc