#include-once Func _Array_Display($array, $titre = "") Local $txt = "" If(StringLen($titre) > 0) Then $txt &= $titre & @CRLF $txt &= "Array" For $i = 1 To UBound($array, 0) $txt &= "[" & UBound($array, $i) & "]" Next $txt &= " : [" & @CRLF Switch UBound($array, 0) Case 0 $txt &= $array & @CRLF Case 1 $txt &= _Array_Display1D($array) Case 2 $txt &= _Array_Display2D($array) Case 3 $txt &= _Array_Display3D($array) EndSwitch $txt &= "]" & @CRLF ConsoleWrite($txt & @CRLF) Return $txt EndFunc Func _Array_Display1D($array) Return _Array_Serialize1D($array, ", ") & @CRLF EndFunc Func _Array_Display2D($array) Return _Array_Serialize2D($array, ", ", @CRLF) & @CRLF 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 Next Return $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_FindPart($array, $search, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If(StringCompare(StringLeft($array[$i], StringLen($search)), $search) = 0) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_FindPart2D($array, $search, $element = 0, $start = 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_Contains($array, $search, $element = 0, $start = 0) Return _Array_Find($array, $search, $element, $start) >= 0 EndFunc Func _Array_Find($array, $search, $element = 0, $start = 0, $element2 = 0) Local $retour Switch UBound($array, 0) Case 0 $retour = $array == $search Case 1 $retour = _Array_Find1D($array, $search, $start) Case 2 If($element < 0) Then $retour = _Array_Find2DFull($array, $search) Else $retour = _Array_Find2D($array, $search, $element, $start) EndIf Case 3 ;~ $retour = _Array_Find3D_2($array, $search, $element, $element2, $start) $retour = _Array_Find3D($array, $search, $element, $start) Case Else Return SetError(4, 0, $retour) EndSwitch Return $retour EndFunc Func _Array_Find1D($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_Find3D_2($array, $search, $element, $element2, $start = 0) Local $indice = -1 For $i = $start To UBound($array, 1)-1 If($array[$i][$element][$element2] == $search) Then $indice = $i ExitLoop EndIf Next Return $indice EndFunc Func _Array_Find2DFull($array, $search) Local $indice = [-1, -1] For $i = 0 To UBound($array, 1)-1 For $j = 0 To UBound($array, 2)-1 If($array[$i][$j] == $search) Then $indice[0] = $i $indice[1] = $j ExitLoop 2 EndIf Next 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_FindQuadruple2D($array, $search1, $element, $search2, $element2, $search3, $element3, $search4, $element4, $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 And $array[$i][$element4] == $search4) 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_FindAllDouble($array, $search, $element = 0, $search2 = "", $element2 = 0, $start = 0) Local $retour[0] Switch UBound($array, 0) Case 1 $retour = _Array_FindAll1D($array, $search, $start) Case 2 $retour = _Array_FindAllDouble2D($array, $search, $element, $search2, $element2, $start) Case Else Return SetError(4, 0, $retour) EndSwitch Return $retour EndFunc Func _Array_FindAllDouble2D($array, $search, $element = 0, $search2 = "", $element2 = 0, $start = 0) Local $indices[0] For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search And $array[$i][$element2] == $search2) Then _Array_Add($indices, $i) EndIf Next Return $indices EndFunc Func _Array_FindAll($array, $search, $element = 0, $start = 0) Local $retour[0] Switch UBound($array, 0) Case 1 $retour = _Array_FindAll1D($array, $search, $start) Case 2 $retour = _Array_FindAll2D($array, $search, $element, $start) Case Else Return SetError(4, 0, $retour) EndSwitch Return $retour EndFunc Func _Array_FindAll1D($array, $search, $start = 0) Local $indices[0] For $i = $start To UBound($array, 1)-1 If($array[$i] == $search) Then _Array_Add($indices, $i) EndIf Next Return $indices EndFunc Func _Array_FindAll2D($array, $search, $element = 0, $start = 0) Local $indices[0] For $i = $start To UBound($array, 1)-1 If($array[$i][$element] == $search) Then _Array_Add($indices, $i) EndIf Next Return $indices EndFunc Func _Array_FindAllByArray2D($array, $arraySearch, $element, $start = 0, $startSearch = 0) Local $retour[0] For $i = $start To UBound($array, 1)-1 For $j = $startSearch To UBound($arraySearch, 1)-1 If($array[$i][$element] == $arraySearch[$j]) Then _Array_Add($retour, $i) EndIf Next Next Return $retour EndFunc Func _Array_ExtractAll2D($array, $search, $element, $start = 0) Local $retour[0][UBound($array, 2)] For $i = $start To UBound($array, 1)-1 If($array[$i][$element] = $search) Then _Array_Add($retour, _Array_ExtractSubArray($array, $i)) EndIf Next Return $retour EndFunc ;~ Local $tabSearch = [1, 2, 7] ;~ Local $tab = [[1, 2, 3], [4, 5, 6], [7, 8, 9]] ;~ Local $tab2 = _Array_ExtractAllByArray2D($tab,$tabSearch, 0) ;~ _Array_Display($tab2) Func _Array_ExtractAllByArray2D($array, $arraySearch, $element, $start = 0, $startSearch = 0) Local $retour[0][UBound($array, 2)] For $i = $start To UBound($array, 1)-1 For $j = $startSearch To UBound($arraySearch, 1)-1 If($array[$i][$element] = $arraySearch[$j]) Then _Array_Add($retour, _Array_ExtractSubArray($array, $i)) ExitLoop 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) If $indice < 0 Then $indice = UBound($array, 1)-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_ExtractSubSubArray($array, $indice = 0, $indice2 = 0) Local $iUBound = UBound($array, 1) - 1 ; Bounds checking If $indice > $iUBound Then Return SetError(3, 0, -1) If $indice < 0 Then $indice = UBound($array, 1)-1 Local $retour = -1 Switch UBound($array, 0) Case 2 $retour = _Array_ExtractSubSubArray2D($array, $indice, $indice2) Case 3 $retour = _Array_ExtractSubSubArray3D($array, $indice, $indice2) EndSwitch Return $retour EndFunc Func _Array_ExtractSubSubArray2D($array, $indice = 0, $indice2 = 0) Local $retour If($indice >= 0 And $indice < UBound($array, 1)) Then $retour = $array[$indice][$indice2] EndIf Return $retour EndFunc Func _Array_ExtractSubSubArray3D($array, $indice = 0, $indice2 = 0) Local $retour[UBound($array, 3)] If($indice >= 0 And $indice < UBound($array, 1)) Then For $i = 0 To UBound($array, 3)-1 $retour[$i] = $array[$indice][$indice2][$i] Next EndIf Return $retour EndFunc Func _Array_AddAllUnique(ByRef $array, $add, $elem = 0, $index = -1) For $i = 0 To UBound($add, 1) - 1 _Array_AddUnique($array, _Array_ExtractSubArray($add, $i), $elem, ($index == -1 ? $index : $index+$i)) Next EndFunc Func _Array_AddUnique(ByRef $array, $add, $elem = 0, $index = -1) Local $search = "" Switch UBound($add, 0) Case 0 $search = $add Case 1 $search = $add[$elem] EndSwitch If(_Array_Find($array, $search, $elem) < 0) Then _Array_Add($array, $add, $index) EndIf 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 = $iUBound 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) Local $ubound = __Max(UBound($array, 2), UBound($add, 1)) ReDim $array[UBound($array, 1)][$ubound] ReDim $add[$ubound] For $j = 0 To UBound($array, 2)-1 $array[$indice][$j] = $add[$j] Next EndFunc Func __Max($iNum1, $iNum2) If Not IsNumber($iNum1) Then Return SetError(1, 0, 0) If Not IsNumber($iNum2) Then Return SetError(2, 0, 0) Return ($iNum1 > $iNum2) ? $iNum1 : $iNum2 EndFunc Func _Array_Set3D(ByRef $array, $add, $indice) If(UBound($array, 2) < UBound($add, 1)) Then ReDim $array[UBound($array, 1)][UBound($add, 1)][UBound($array, 3)] EndIf 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, "", 1, 1) ;~ _Array_Display($arr) Func _Array_DeleteByValue(ByRef $array, $value, $element = 0, $start = 0) Local $indices = _Array_FindAll($array, $value, $element, $start) For $i = UBound($indices, 1)-1 To 0 Step -1 _Array_Delete($array, $indices[$i]) Next EndFunc Func _Array_DeleteByDoubleValues(ByRef $array, $search, $element = 0, $search2 = "", $element2 = 0, $start = 0) Local $indices = _Array_FindAllDouble($array, $search, $element, $search2, $element2, $start) For $i = UBound($indices, 1)-1 To 0 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, $element = 0, $start = 0) Switch UBound($array, 0) Case 1 _Array_DeleteDoublons1D($array, $start) Case 2 _Array_DeleteDoublons2D($array, $element, $start) 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, $element = 0, $start = 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 _ArrayEqualsUnorder($arr1, $arr2, $element = 0) Local $ret = False For $i = UBound($arr1) - 1 To 0 Step -1 Local $found = False For $j = UBound($arr2) - 1 To 0 Step -1 Local $elem1 = Null Local $elem2 = Null Switch(UBound($arr1, 0)) Case 0 $elem1 = $arr1 Case 1 $elem1 = $arr1[$i] Case 2 $elem1 = $arr1[$i][$element] EndSwitch Switch(UBound($arr2, 0)) Case 0 $elem2 = $arr2 Case 1 $elem2 = $arr2[$j] Case 2 $elem2 = $arr2[$j][$element] EndSwitch If($elem1 == $elem2) Then _Array_Delete($arr1, $i) _Array_Delete($arr2, $j) $found = True ExitLoop EndIf Next If(Not($found)) Then ExitLoop EndIf Next If(UBound($arr2, 1) == 0 And UBound($arr1, 1) == 0) Then $ret = True EndIf Return $ret EndFunc Func _Array_FromFile($file, $delim1, $delim2, $noBlank = True) Local $array[0][0] Local $contenu = FileRead($file) If($delim1 = @CRLF Or $delim2 = @CRLF) Then $contenu = StringReplace($contenu, @CRLF, @LF) $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 Func _Array_Deserialize($txt, $delim1 = "|", $delim2 = Null) Local $ret[0][0] Local $d1 = False Local $arr = [$txt] If($delim2 <> Null) Then $arr = StringSplit($txt, $delim2, 3) EndIf If(UBound($arr, 1) <= 1) Then $d1 = True ReDim $ret[0] EndIf For $i = 0 To UBound($arr, 1) - 1 Local $split = StringSplit($arr[$i], $delim1, 3) If(UBound($split, 1) <= 1) Then $ret = $split[0] Else If($d1) Then _Array_AddAll($ret, $split) Else _Array_Add($ret, $split) EndIf EndIf Next Return $ret EndFunc Func _Array_Serialize($array, $delim1 = ", ", $delim2 = "|", $delim3 = @CRLF) Local $txt = "" Switch UBound($array, 0) Case 0 $txt = $array Case 1 $txt = _Array_Serialize1D($array, $delim1) Case 2 $txt = _Array_Serialize2D($array, $delim1, $delim2) Case 3 $txt = _Array_Serialize3D($array, $delim1, $delim2, $delim3) EndSwitch Return $txt EndFunc Func _Array_Serialize1D($array, $delim = ", ") Local $txt = "" For $i = 0 To UBound($array, 1) - 1 $txt &= $array[$i] & $delim Next $txt = StringTrimRight($txt, StringLen($delim)) Return $txt EndFunc Func _Array_Serialize2D($array, $delim1 = ", ", $delim2 = @CRLF) Local $txt = "" For $i = 0 To UBound($array, 1) - 1 For $j = 0 To UBound($array, 2) - 1 $txt &= $array[$i][$j] & $delim1 Next $txt = StringTrimRight($txt, StringLen($delim1)) & $delim2 Next $txt = StringTrimRight($txt, StringLen($delim2)) Return $txt EndFunc Func _Array_Serialize3D($array, $delim1 = ", ", $delim2 = "|", $delim3 = @CRLF) Local $txt = "" For $i = 0 To UBound($array, 1) - 1 For $j = 0 To UBound($array, 2) - 1 For $k = 0 To UBound($array, 2) - 1 $txt &= $array[$i][$j][$k] & $delim1 Next $txt = StringTrimRight($txt, StringLen($delim1)) & $delim2 Next $txt = StringTrimRight($txt, StringLen($delim2)) & $delim3 Next $txt = StringTrimRight($txt, StringLen($delim3)) Return $txt EndFunc Func _Array_ToFile($file, $array, $delim1 = ", ", $delim2 = "|", $delim3 = @CRLF) Local $fOpen = FileOpen($file, 2) FileWrite($fOpen, _Array_Serialize($array, $delim1, $delim2, $delim3)) FileClose($fOpen) EndFunc Func _Array_FindExact($array, $array2) Local $indice = -1 If(UBound($array, 2) == UBound($array2, 1)) Then For $i = 0 To UBound($array, 1) - 1 Local $found = True For $j = 0 To UBound($array, 2) - 1 If($array[$i][$j] <> $array2[$j]) Then $found = False ExitLoop EndIf Next If($found) Then $indice = $i ExitLoop EndIf Next EndIf Return $indice EndFunc Func _Array_Reverse(ByRef $avArray, $iStart = 0, $iEnd = 0) If Not IsArray($avArray) Then Return SetError(1, 0, 0) If UBound($avArray, 0) > 2 Then Return SetError(3, 0, 0) If Not UBound($avArray, 1) Then Return SetError(4, 0, 0) Local $vTmp, $iUBound = UBound($avArray, 1) - 1 ; Bounds checking If $iEnd < 1 Or $iEnd > $iUBound Then $iEnd = $iUBound If $iStart < 0 Then $iStart = 0 If $iStart > $iEnd Then Return SetError(2, 0, 0) ; Reverse For $i = $iStart To Int(($iStart + $iEnd - 1) / 2) $vTmp = _Array_ExtractSubArray($avArray, $i) _Array_Set($avArray, _Array_ExtractSubArray($avArray, $iEnd), $i) _Array_Set($avArray, $vTmp, $iEnd) $iEnd -= 1 Next Return 1 EndFunc Func _Array_Sort(ByRef $array, $element = 0, $descending = 0) Switch UBound($array, 0) Case 1 _Array_Sort1D($array, $descending) Case 2 _Array_Sort2D($array, $element, $descending) EndSwitch EndFunc Func _Array_Sort1D(ByRef $array, $descending = 0) If Not IsArray($array) Then Return SetError(1, 0, 0) If UBound($array, 0) <> 1 Then Return SetError(2, 0, 0) Local $arrRet[0] For $i = 0 To UBound($array, 1) - 1 Local $elem = $array[$i] Local $index = -1 For $j = 0 To UBound($arrRet, 1) - 1 If($arrRet[$j] > $elem) Then $index = $j ExitLoop EndIf Next _Array_Add($arrRet, $elem, $index) Next If($descending) Then _Array_Reverse($arrRet) $array = $arrRet EndFunc Func _Array_Sort2D(ByRef $array, $element = 0, $descending = 0) If Not IsArray($array) Then Return SetError(1, 0, 0) If UBound($array, 0) <> 2 Then Return SetError(2, 0, 0) Local $arrRet[0][UBound($array, 2)] For $i = 0 To UBound($array, 1) - 1 Local $subArr = _Array_ExtractSubArray($array, $i) Local $elem = $subArr[$element] Local $index = -1 For $j = 0 To UBound($arrRet, 1) - 1 If($arrRet[$j][$element] > $elem) Then $index = $j ExitLoop EndIf Next _Array_Add($arrRet, $subArr, $index) Next If($descending) Then _Array_Reverse($arrRet) $array = $arrRet EndFunc Func _IsValidArray($donnees, $ubound0, $ubound1Min = Null, $ubound2Min = Null, $ubound3Min = Null) Return UBound($donnees, 0) = $ubound0 And (UBound($donnees, 1) >= $ubound1Min Or $ubound1Min = Null) And (UBound($donnees, 2) >= $ubound2Min Or $ubound2Min = Null) And (UBound($donnees, 3) >= $ubound3Min Or $ubound3Min = Null) EndFunc Func _Array_GetValueOrDefault($array, $index, $default = Null) Return UBound($array, 1) > $index ? $array[$index] : $default EndFunc