#include-once #include ; #FUNCTION# ============================================================================= ; Name...........: __Array_DeleteColumn ; Modified by @pixelsearch ; ========================================================================================= Func __Array_DeleteColumn(ByRef $0_Array, $0_List) If Not IsArray($0_Array) Then Return Local $o_List = StringSplit($0_List, ';', 2) If UBound($o_List) = 0 Then Return ;~ Create Column List Local $o_String = '' For $i = 0 To UBound($o_List) - 1 If StringInStr($o_List[$i], '-') Then $o_Temp = StringSplit($o_List[$i], '-', 2) __GetNumber($o_String, $o_Temp[0], $o_Temp[1]) Else $o_String &= $o_List[$i] & '|' Endif Next Local $o_Column = StringSplit($o_String, '|', 2) Redim $o_Column[UBound($o_Column)-1] ;~ removing all duplicates element $o_Column = _ArrayUnique($o_Column, default, default, default, 0) ;~ Convert String to Number For $i = 0 To UBound($o_Column) - 1 $o_Column[$i] = Number($o_Column[$i]) Next ; Sort a 1D Array of columns to delete (ascending, for $jStart and binary search to come) _ArraySort($o_Column) Local $jStart = $o_Column[0] ; 1st column to delete, i.e. don't touch column(s) on its left ConsoleWrite("$jStart = " & $jStart & @crlf) ; 1 in jugador's example ;_ArrayDisplay($o_Column, "To delete, asc") ; 17 cols ; Create a 1D array of columns to keep (ascending) Local $aColsToKeep[Ubound($0_Array, 2) - Ubound($o_Column)] ; 36 - 17 = 19 cols to keep ConsoleWrite("Ubound($aColsToKeep) = " & Ubound($aColsToKeep) & @crlf) ; 19 cols Local $iIndex = - 1 For $i = 0 To Ubound($0_Array, 2) - 1 If _ArrayBinarySearch($o_Column, $i) = -1 Then ; not found (-1) $iIndex += 1 ; 0+ $aColsToKeep[$iIndex] = $i EndIf Next ;_ArrayDisplay($aColsToKeep, "To keep, asc") ; 19 cols ; Position each element at its place, then 1 final Redim to delete rightmost column(s) For $i = 0 To Ubound($0_Array) - 1 For $j = $jStart To Ubound($aColsToKeep) - 1 $0_Array[$i][$j] = $0_Array[$i][$aColsToKeep[$j]] Next Next ReDim $0_Array[Ubound($0_Array)][Ubound($aColsToKeep)] ; 19 cols EndFunc ; #FUNCTION# ============================================================================= ; Name...........: __GetNumber ; ========================================================================================= Func __GetNumber(Byref $o_GetNumber, $o_NoFrom, $o_NoTo = 0) Local $o_Temp If ($o_NoFrom = $o_NoTo) Then $o_GetNumber &= $o_NoFrom & '|' Return Endif If ($o_NoFrom < $o_NoTo) Then $o_Temp = $o_NoFrom $o_NoFrom = $o_NoTo $o_NoTo = $o_Temp Endif If ($o_NoFrom > $o_NoTo) Then __GetNumber($o_GetNumber ,$o_NoFrom - 1, $o_NoTo) $o_GetNumber &= $o_NoFrom & '|' Endif EndFunc