Snippets ( AutoIt Array ): Difference between revisions
Jump to navigation
Jump to search
(5 intermediate revisions by 3 users not shown) | |||
Line 131: | Line 131: | ||
Case 2 | Case 2 | ||
Local $aEmpty2D[1][UBound($aArray, 2)] | ; Edit by DatMCEyeBall - Instead of emptying the array to [1][$x] we empty it to [$x][$y] | ||
; where $x is the 1st dimensions size and $y the 2nd. | |||
; Previous code was: Local $aEmpty2D[1][UBound($aArray, 2)] | |||
; This way we preserve the arrays' original size. | |||
Local $aEmpty2D[UBound($aArray, 1)][UBound($aArray, 2)] | |||
$aArray = $aEmpty2D | $aArray = $aEmpty2D | ||
EndSwitch | EndSwitch | ||
Line 500: | Line 504: | ||
Return True | Return True | ||
EndFunc ;==>_AssocArrayDestroy | EndFunc ;==>_AssocArrayDestroy | ||
</syntaxhighlight> | |||
[[#top | ReturnToContents]] | |||
== _DynEnumArray == | |||
{{Snippet Header | |||
| AuthorURL = 26215-spudw2k | |||
| AuthorName = spudw2k | |||
}} | |||
<syntaxhighlight lang="autoit"> | |||
Func _DynEnumArray($aArrayToEnum) | |||
Local $aDims[1][2]=[["ElementIdx","ElementCount"]] ;Create an Array to Track Dimensions and Elements | |||
For $iX = 1 to UBound($aArrayToEnum,0) | |||
ReDim $aDims[$iX+1][2] | |||
$aDims[$iX][0]=0 | |||
$aDims[$iX][1]=UBound($aArrayToEnum,$iX) | |||
Next | |||
Do ;Loop Through Array Elements | |||
$sArray = "$aArrayToEnum" | |||
For $iX = 1 to UBound($aDims)-1 | |||
$sArray &= "[" & $aDims[$iX][0] & "]" | |||
Next | |||
ConsoleWrite($sArray & " " & Execute($sArray) & @CRLF) ;Output Subscript and Value | |||
$aDims[UBound($aDims)-1][0] += 1 ;Increment Last Dimension Element | |||
For $iY = UBound($aDims)-2 To 1 Step -1 ;Increment Dimension Element | |||
If $aDims[$iY+1][0] = $aDims[$iY+1][1] Then | |||
$aDims[$iY+1][0]=0 | |||
$aDims[$iY][0]+=1 | |||
EndIf | |||
Next | |||
Until $aDims[1][0]=$aDims[1][1] | |||
Return ConsoleWrite(@CRLF) | |||
EndFunc | |||
;Demos | |||
Local $aArray[5]=["Never","Gonna","Give","You","Up"] | |||
_DynEnumArray($aArray) | |||
Local $aArray[6][2]=[["Penn", "Teller"],["Gilbert", "Sullivan"],["Sonny", "Cher"],["Stone", "Parker"],["Fischbacher", "Horn"],["Plant", "Page"]] | |||
_DynEnumArray($aArray) | |||
Local $aArray[2][3][2]=[[["All","Your"],["Base","Are"],["Belong","To Us"]],[["Is","This"],["The","Way"],["Back","Home"]]] | |||
_DynEnumArray($aArray) | |||
</syntaxhighlight> | </syntaxhighlight> | ||
Line 607: | Line 658: | ||
}} | }} | ||
<syntaxhighlight lang = "autoit"> | <syntaxhighlight lang = "autoit">Local $sString = 'String' | ||
Local $a1DArray[2] = [1, 'Row_1'] | |||
Local $a2DArray[2][2] = [[1],['Row_1: Col_1', 'Row_1: Col_2']] | |||
ConsoleWrite( | ConsoleWrite('Is the variable $sString a 1D Array?: ' & _Is1DArray($sString) & @CRLF) | ||
ConsoleWrite( | ConsoleWrite('Is the variable $a1DArray a 1D Array?: ' & _Is1DArray($a1DArray) & @CRLF) | ||
ConsoleWrite( | ConsoleWrite('Is the variable $a2DArray a 1D Array?: ' & _Is1DArray($a2DArray) & @CRLF) | ||
; Check if a variable is a 1D Array. | ; Check if a variable is a 1D Array. | ||
Func _Is1DArray(ByRef $aArray) | Func _Is1DArray(ByRef Const $aArray) | ||
Return UBound($aArray) And (UBound($aArray, 0) = 1) | |||
EndFunc ;==>_Is1DArray | EndFunc ;==>_Is1DArray | ||
</syntaxhighlight> | </syntaxhighlight> |
Latest revision as of 07:30, 3 March 2017
_1Dto2DArray
Author: guinness
#include <Array.au3>
Global $aArray_1D[2] = ["Data", "Data"]
_ArrayDisplay($aArray_1D)
_1Dto2DArray($aArray_1D)
_ArrayDisplay($aArray_1D)
Global $aArray_1D[10] = ["Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data", "Data"]
_ArrayDisplay($aArray_1D)
_1Dto2DArray($aArray_1D, 9)
_ArrayDisplay($aArray_1D)
Func _1Dto2DArray(ByRef $aArray, Const $iAdditionalColumns = 1)
Local Const $iSize = UBound($aArray, 1)
Local $aReturn[$iSize][$iAdditionalColumns + 1]
For $A = 0 To $iSize - 1
$aReturn[$A][0] = $aArray[$A]
Next
$aArray = $aReturn
Return $aReturn
EndFunc ;==>_1Dto2DArray
_ArrayAddEx
Author: guinness
#include <Array.au3>
Example_1()
Example_2()
Func Example_1()
Local $aArray_1[1] = ["Data_0"], $iBegin
$iBegin = TimerInit() ; Start the timer.
For $i = 1 To 5000
_ArrayAdd($aArray_1, "Data_" & $i)
Next
$iBegin = TimerDiff($iBegin) ; End the timer and find the difference from start to finish.
ConsoleWrite("_ArrayAdd from Array.au3 >> " & $iBegin & @CRLF)
_ArrayDisplay($aArray_1)
EndFunc ;==>Example_1
Func Example_2()
Local $aArray_2[1] = ["Data_0"], $iBegin, $iDimension, $iCount
$iBegin = TimerInit() ; Start the timer.
For $i = 1 To 5000
_ArrayAddEx($aArray_2, "Data_" & $i, $iDimension, $iCount) ; $iDimension is the overall size of the array & $iCount is the last index number, because regarding the overall size +1 as the next item will give false results as we're increasing the size of the array not by 1 but multiplying 2.
Next
$iBegin = TimerDiff($iBegin) ; End the timer and find the difference from start to finish.
ConsoleWrite("_ArrayAddEx by guinness >> " & $iBegin & @CRLF)
ReDim $aArray_2[$iCount] ; Remove the empty rows.
_ArrayDisplay($aArray_2)
EndFunc ;==>Example_2
Func _ArrayAddEx(ByRef $aArray, $sData, ByRef $iDimension, ByRef $iCount) ; Taken from Array.au3 and modified by guinness to reduce the use of ReDim.
If IsArray($aArray) = 0 Then
Return SetError(1, 0, -1)
EndIf
If UBound($aArray, 0) <> 1 Then
Return SetError(2, 0, -1)
EndIf
If $iCount = 0 Then
$iCount = UBound($aArray, 1)
EndIf
$iCount += 1
If ($iCount + 1) >= $iDimension Then
$iDimension = (UBound($aArray, 1) + 1) * 2
ReDim $aArray[$iDimension]
EndIf
$aArray[$iCount - 1] = $sData
Return $iCount - 1
EndFunc ;==>_ArrayAddEx
_ArrayEmpty
Author: guinness
Creates Empty 1D & 2D Array's
#include <Array.au3>
Global $aMain[11] = [10]
_ArrayEmpty($aMain)
_ArrayDisplay($aMain, "Empty 1D Array.")
Global $aMainEx[11][3] = [[10]]
_ArrayEmpty($aMainEx)
_ArrayDisplay($aMainEx, "Empty 2D Array.")
Func _ArrayEmpty(ByRef $aArray)
Switch UBound($aArray, 0) ; Dimension, 1D or 2D array are supported.
Case 1
Local $aEmpty1D[1]
$aArray = $aEmpty1D
Case 2
; Edit by DatMCEyeBall - Instead of emptying the array to [1][$x] we empty it to [$x][$y]
; where $x is the 1st dimensions size and $y the 2nd.
; Previous code was: Local $aEmpty2D[1][UBound($aArray, 2)]
; This way we preserve the arrays' original size.
Local $aEmpty2D[UBound($aArray, 1)][UBound($aArray, 2)]
$aArray = $aEmpty2D
EndSwitch
EndFunc ;==>_ArrayEmpty
_ArrayGet
Author: ProgAndy
Easy access for nested arrays up to 20 nested dimensions (including multidimensional arrays)
Global $b[2] = ["a", "b"]
Global $a[3][2] = [[0, -1], [$b, "x"], [1, -2]]
Global $c[5] = [11, 22, 33, 44, 55]
MsgBox(0, "", _ArrayGet($a, 1, 0, 1) & " # " & @error)
; #FUNCTION# ====================================================================================================================
; Name ..........: _ArrayGet
; Description ...: Gets a value from a nested multidimensional array
; Syntax ........: _ArrayGet(Byref $aArray, $i1[, $i2 = 0[, $i3 = 0[, $i4 = 0[, $i5 = 0[, $i6 = 0[, $i7 = 0[, $i8 = 0[,
; $i9 = 0[, $i10 = 0[, $i11 = 0[, $i12 = 0[, $i13 = 0[, $i14 = 0[, $i15 = 0[, $i16 = 0[, $i17 = 0[,
; $i18 = 0[, $i19 = 0[, $i20 = 0]]]]]]]]]]]]]]]]]]])
; Parameters ....: $aArray - [in/out] An array of unknowns.
; $i1 - first array index.
; $i2 - [optional] second array index.
; $i3 - [optional] third array index.
; $i4 - [optional] fourth array index.
; $i5 - [optional] fifth array index.
; $i6 - [optional] sixth array index.
; $i7 - [optional] seventh array index.
; $i8 - [optional] eighth array index.
; $i9 - [optional] ninth array index.
; $i10 - [optional] 10th array index.
; $i11 - [optional] 11th array index.
; $i12 - [optional] 12th array index.
; $i13 - [optional] 13th array index.
; $i14 - [optional] 14th array index.
; $i15 - [optional] 15th array index.
; $i16 - [optional] 16th array index.
; $i17 - [optional] 17th array index.
; $i18 - [optional] 18th array index.
; $i19 - [optional] 19th array index.
; $i20 - [optional] 20th array index.
; Return values .: Success: Value at the specified index
; Error: Nothing, Sets @error to:
; |1 - Trying to acces non-array as array
; |2 - Not enough dimensions for the last accessed array
; |3 - Index out of bounds for a dimension
; @extended contains the dimension in error (according to parameter list)
; Author ........: ProgAndy
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _ArrayGet(ByRef $aArray, $i1, $i2=0, $i3=0, $i4=0, $i5=0, $i6=0, $i7=0, $i8=0, $i9=0, $i10=0, $i11=0, $i12=0, $i13=0, $i14=0, $i15=0, $i16=0, $i17=0, $i18=0, $i19=0, $i20=0)
#forceref $i1, $i2, $i3, $i4, $i5, $i6, $i7, $i8, $i9, $i10, $i11, $i12, $i13, $i14, $i15, $i16, $i17, $i18, $i19, $i20
; ProgAndy
Local $NULL
If Not IsArray($aArray) Then Return SetError(1, 1, $NULL)
Local $iDims = UBound($aArray, 0)
If @NumParams <= $iDims Then Return SetError(2, @NumParams, $NULL)
Local $sAccess = "$aArray"
For $i = 1 To $iDims
Local $iIndex = Int(Eval("i" & $i))
If $iIndex >= UBound($aArray, $i) Then Return SetError(3, $i, $NULL)
$sAccess &= '[' & $iIndex & ']'
Next
If @NumParams-1 > $iDims Then ; Still indices left
For $i = $iDims+1 To @NumParams-1
$sAccess &= ", $i" & $i
Next
Local $vResult = Execute("_ArrayGet(" & $sAccess & ")")
If @error Then SetError(@error, @extended+$iDims)
Return $vResult
Else ;
Return Execute($sAccess)
EndIf
EndFunc
_ArraySet
Author: ProgAndy
Easy access for nested arrays up to 20 nested dimensions (including multidimensional arrays)
Global $b[2] = ['a', 'b'
Global $a[3][2] = [[0, -1], [$b, "x"], [1, -2]]
Global $c[5] = [11, 22, 33, 44, 55]
_ArraySet($a, $c, 1, 0, 0)
; #FUNCTION# ====================================================================================================================
; Name ..........: _ArraySet
; Description ...: Sets a value from a nested multidimensional array
; Syntax ........: _ArraySet(Byref $aArray, $vValue, $i1[, $i2 = 0[, $i3 = 0[, $i4 = 0[, $i5 = 0[, $i6 = 0[, $i7 = 0[, $i8 = 0[,
; $i9 = 0[, $i10 = 0[, $i11 = 0[, $i12 = 0[, $i13 = 0[, $i14 = 0[, $i15 = 0[, $i16 = 0[, $i17 = 0[,
; $i18 = 0[, $i19 = 0[, $i20 = 0]]]]]]]]]]]]]]]]]]])
; Parameters ....: $aArray - [in/out] An array of unknowns.
; $vValue - value to set at specified index.
; $i1 - first array index.
; $i2 - [optional] second array index.
; $i3 - [optional] third array index.
; $i4 - [optional] fourth array index.
; $i5 - [optional] fifth array index.
; $i6 - [optional] sixth array index.
; $i7 - [optional] seventh array index.
; $i8 - [optional] eighth array index.
; $i9 - [optional] ninth array index.
; $i10 - [optional] 10th array index.
; $i11 - [optional] 11th array index.
; $i12 - [optional] 12th array index.
; $i13 - [optional] 13th array index.
; $i14 - [optional] 14th array index.
; $i15 - [optional] 15th array index.
; $i16 - [optional] 16th array index.
; $i17 - [optional] 17th array index.
; $i18 - [optional] 18th array index.
; $i19 - [optional] 19th array index.
; $i20 - [optional] 20th array index.
; Return values .: Success: True
; Error: False, Sets @error to:
; |1 - Trying to acces non-array as array
; |2 - Not enough dimensions for the last accessed array
; |3 - Index out of bounds for a dimension
; |all: - @extended contains the dimension in error (according to parameter list)
; Author ........: ProgAndy
; Modified ......:
; Remarks .......:
; Related .......:
; Link ..........:
; Example .......: No
; ===============================================================================================================================
Func _ArraySet(ByRef $aArray, Const $vValue, $i1, $i2=0, $i3=0, $i4=0, $i5=0, $i6=0, $i7=0, $i8=0, $i9=0, $i10=0, $i11=0, $i12=0, $i13=0, $i14=0, $i15=0, $i16=0, $i17=0, $i18=0, $i19=0, $i20=0)
; ProgAndy
Local Const $NULL = False
If Not IsArray($aArray) Then Return SetError(1, 1, $NULL)
Local $iDims = UBound($aArray, 0)
If @NumParams-2 < $iDims Then Return SetError(2, @NumParams-1, $NULL)
Local $sAccess = "$aArray"
For $i = 1 To $iDims
Local $iIndex = Int(Eval("i" & $i))
If $iIndex >= UBound($aArray, $i) Then Return SetError(3, $i, $NULL)
$sAccess &= '[' & $iIndex & ']'
Next
If @NumParams-2 > $iDims Then
$sAccess &= ", $vValue"
For $i = $iDims+1 To @NumParams-2
$sAccess &= ", $i" & $i
Next
Local $fSuccess = Execute("_ArraySet(" & $sAccess & ")")
If @error Then SetError(@error, @extended+$iDims)
Return $fSuccess
EndIf
Switch $iDims
Case 1
$aArray[$i1] = $vValue
Case 2
$aArray[$i1][$i2] = $vValue
Case 3
$aArray[$i1][$i2][$i3] = $vValue
Case 4
$aArray[$i1][$i2][$i3][$i4] = $vValue
Case 5
$aArray[$i1][$i2][$i3][$i4][$i5] = $vValue
Case 6
$aArray[$i1][$i2][$i3][$i4][$i5][$i6] = $vValue
Case 7
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7] = $vValue
Case 8
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8] = $vValue
Case 9
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9] = $vValue
Case 10
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10] = $vValue
Case 11
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11] = $vValue
Case 12
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12] = $vValue
Case 13
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13] = $vValue
Case 14
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14] = $vValue
Case 15
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15] = $vValue
Case 16
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16] = $vValue
Case 17
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17] = $vValue
Case 18
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18] = $vValue
Case 19
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18][$i19] = $vValue
Case 20
$aArray[$i1][$i2][$i3][$i4][$i5][$i6][$i7][$i8][$i9][$i10][$i11][$i12][$i13][$i14][$i15][$i16][$i17][$i18][$i19][$i20] = $vValue
EndSwitch
Return True
EndFunc
_ArrayLength
Author: guinness
Global $aArray[2][50]
ConsoleWrite(_ArrayLength($aArray, 2) & @CRLF) ;= > 10 - Total items
ConsoleWrite(_ArrayLength($aArray, 1) & @CRLF) ;= > 5 - Columns
ConsoleWrite(_ArrayLength($aArray, 0) & @CRLF) ;= > 2 - Rows
ConsoleWrite(@CRLF)
Global $aArray[2]
ConsoleWrite(_ArrayLength($aArray, 2) & @CRLF) ;= > 2 - Total items
ConsoleWrite(_ArrayLength($aArray, 1) & @CRLF) ;= > 1 - Columns
ConsoleWrite(_ArrayLength($aArray, 0) & @CRLF) ;= > 2 - Rows
Func _ArrayLength($aArray, $iType = 1)
Local $iDim = UBound($aArray, 0)
If $iDim < 0 Or $iDim > 2 Then ; If not a 1D or 2D Array, then return -1 and set @error to non-zero.
Return SetError(1, 0, -1)
EndIf
Switch $iType
Case 2
If $iDim = 2 Then
Return UBound($aArray, 2) * UBound($aArray, 1)
Else
Return UBound($aArray, 1)
EndIf
Case 1
If $iDim = 2 Then
Return UBound($aArray, 2)
Else
Return 1
EndIf
Case Else
Return UBound($aArray, 1)
EndSwitch
EndFunc ;==>_ArrayLength
_ArraySortNum
Author: SmOke_N
; ArraySortNum(ByRef $nArray, $Ascending = 0, $Start = 1)
; Sorts arrays based on TRUE Numerical Order, including Decimals
#include <Array.au3>
; Example sort Array created with StringSplit.
Global $avArray = StringSplit("6,8,10,4,2,13,12,129,106.1,106.4", ",")
_ArraySortNum($avArray, 1)
_ArrayDisplay($avArray, "Sorted Desc starting at 1")
Func _ArraySortNum(ByRef $nArray, $Ascending = 0, $Start = 1)
For $i = $Start To UBound($nArray) - 2
Local $SE = $i
If $Ascending = 0 Then
For $x = $i To UBound($nArray) - 1
If Number($nArray[$SE]) < Number($nArray[$x]) Then $SE = $x
Next
Else
For $x = $i To UBound($nArray) - 1
If Number($nArray[$SE]) > Number($nArray[$x]) Then $SE = $x
Next
EndIf
Local $HLD = $nArray[$i]
$nArray[$i] = $nArray[$SE]
$nArray[$SE] = $HLD
Next
EndFunc ;==>_ArraySortNum
_AssocArray
Author: MilesAhead
; use Scripting.Dictionary object for simple associative arrays
; with string keys. Key comparisons are case insensitive.
Global $myArray
$myArray = _AssocArray()
If @error Then
MsgBox(0x1010,"_AssocArray() Error", "Error Creating Associative Array!")
Exit
EndIf
$myArray("AntiqueWhite") = 0xFAEBD7
$myArray("Black") = 0x000000
$myArray("Blue") = 0x0000FF
$myArray("Brown") = 0xA52A2A
$myArray("CadetBlue") = 0x5F9EA0
$myArray("Chocolate") = 0xD2691E
$myArray("Coral") = 0xFF7F50
MsgBox(0x1040,"","Hex for Chocolate Color is: 0x" & Hex($myArray("Chocolate"),6))
_AssocArrayDestroy($myArray)
Func _AssocArray()
Local $aArray = ObjCreate("Scripting.Dictionary")
If @error Then
Return SetError(1, 0, 0)
EndIf
$aArray.CompareMode = 1
Return $aArray
EndFunc ;==>_AssocArray
Func _AssocArrayDestroy(ByRef $aArray)
If Not IsObj($aArray) Then
Return False
EndIf
$aArray.RemoveAll()
$aArray = 0
Return True
EndFunc ;==>_AssocArrayDestroy
_DynEnumArray
Author: spudw2k
Func _DynEnumArray($aArrayToEnum)
Local $aDims[1][2]=[["ElementIdx","ElementCount"]] ;Create an Array to Track Dimensions and Elements
For $iX = 1 to UBound($aArrayToEnum,0)
ReDim $aDims[$iX+1][2]
$aDims[$iX][0]=0
$aDims[$iX][1]=UBound($aArrayToEnum,$iX)
Next
Do ;Loop Through Array Elements
$sArray = "$aArrayToEnum"
For $iX = 1 to UBound($aDims)-1
$sArray &= "[" & $aDims[$iX][0] & "]"
Next
ConsoleWrite($sArray & " " & Execute($sArray) & @CRLF) ;Output Subscript and Value
$aDims[UBound($aDims)-1][0] += 1 ;Increment Last Dimension Element
For $iY = UBound($aDims)-2 To 1 Step -1 ;Increment Dimension Element
If $aDims[$iY+1][0] = $aDims[$iY+1][1] Then
$aDims[$iY+1][0]=0
$aDims[$iY][0]+=1
EndIf
Next
Until $aDims[1][0]=$aDims[1][1]
Return ConsoleWrite(@CRLF)
EndFunc
;Demos
Local $aArray[5]=["Never","Gonna","Give","You","Up"]
_DynEnumArray($aArray)
Local $aArray[6][2]=[["Penn", "Teller"],["Gilbert", "Sullivan"],["Sonny", "Cher"],["Stone", "Parker"],["Fischbacher", "Horn"],["Plant", "Page"]]
_DynEnumArray($aArray)
Local $aArray[2][3][2]=[[["All","Your"],["Base","Are"],["Belong","To Us"]],[["Is","This"],["The","Way"],["Back","Home"]]]
_DynEnumArray($aArray)
_FuncListToArray
Author: GEOSoft
$aFlist = _FuncListToArray(@ScriptFullPath)
If NOT @Error Then
For $i = 0 To Ubound($aFlist) -1
MsgBox(0, "TEST", $aFlist[$i], 2)
Next
EndIf
Func _FuncListToArray($sStr)
If FileExists($sStr) Then $sStr = FileRead($sStr)
Local $sRegEx = "(?i)(?m:^|\n)\s*Func\s+(\w+)\s*\("
$aRegEx = StringRegExp($sStr, $sRegEx, 3)
If IsArray($aRegEx) Then Return $aRegEx
Return SetError(1)
EndFunc
Identify Duplicate Values In Arrays
Author: GaryFrost
; Identify Duplicate Values In Arrays
#include <Array.au3>
Global $a1[3] = [1, 2, 3], $a2[5] = [5, 6, 7, 8, 9], $a3[2] = [3, 5]
Global $a_a[4] = [3, $a1, $a2, $a3]
MsgBox(0, "Dupes?", _SearchForDupes($a_a))
Func _SearchForDupes($a_arrays, $i_ReturnType = 0)
Local $Dupes[1] = [0]
If $a_arrays[0] < 2 Then Return ''
For $i = 1 To $a_a[0] - 1
For $j = $i + 1 To $a_a[0]
_FindDupe($a_a[$i], $a_a[$j], $Dupes)
Next
Next
If $Dupes[0] = 0 Then Return ''
_ArraySort($Dupes)
If Not $i_ReturnType Then
Local $s_return = ''
For $x = 1 To $Dupes[0]
$s_return &= $Dupes[$x] & ','
Next
Return StringTrimRight($s_return, 1)
Else
Return $Dupes
EndIf
EndFunc ;==>_SearchForDupes
Func _FindDupe(ByRef $a_array01, ByRef $a_array02, ByRef $Dupes)
Local $found = False
For $i = 0 To UBound($a_array01) - 1
For $j = 0 To UBound($a_array02) - 1
If $a_array01[$i] = $a_array02[$j] Then
$found = False
For $x = 1 To $Dupes[0]
If $Dupes[$x] = $a_array01[$i] Then
$found = True
ExitLoop
EndIf
Next
If Not $found Then
$Dupes[0] += 1
ReDim $Dupes[$Dupes[0] + 1]
$Dupes[$Dupes[0]] = $a_array01[$i]
EndIf
EndIf
Next
Next
EndFunc ;==>_FindDupe
_Is1DArray
Author: guinness
Local $sString = 'String'
Local $a1DArray[2] = [1, 'Row_1']
Local $a2DArray[2][2] = [[1],['Row_1: Col_1', 'Row_1: Col_2']]
ConsoleWrite('Is the variable $sString a 1D Array?: ' & _Is1DArray($sString) & @CRLF)
ConsoleWrite('Is the variable $a1DArray a 1D Array?: ' & _Is1DArray($a1DArray) & @CRLF)
ConsoleWrite('Is the variable $a2DArray a 1D Array?: ' & _Is1DArray($a2DArray) & @CRLF)
; Check if a variable is a 1D Array.
Func _Is1DArray(ByRef Const $aArray)
Return UBound($aArray) And (UBound($aArray, 0) = 1)
EndFunc ;==>_Is1DArray
_Is2DArray
Author: guinness
Check if a variable is a 2D Array.
Local $sString = 'String'
Local $a1DArray[2] = [1, 'Row_1']
Local $a2DArray[2][2] = [[1],['Row_1: Col_1', 'Row_1: Col_2']]
ConsoleWrite('Is the variable $sString a 1D Array?: ' & _Is2DArray($sString) & @CRLF)
ConsoleWrite('Is the variable $a1DArray a 1D Array?: ' & _Is2DArray($a1DArray) & @CRLF)
ConsoleWrite('Is the variable $a2DArray a 1D Array?: ' & _Is2DArray($a2DArray) & @CRLF)
; Check if a variable is a 2D Array.
Func _Is2DArray(ByRef Const $aArray)
Return UBound($aArray) And (UBound($aArray, 0) = 2)
EndFunc ;==>_Is2DArray
_IsInBounds
Author: guinness
#include <Constants.au3>
Local $aArray[5] = ['Item_1', 'Item_2', 'Item_3', 'Item_4', 'Item_5']
ConsoleWrite(_IsInBounds($aArray, 1) & @CRLF) ; Returns True as the Array has 5 items.
ConsoleWrite(_IsInBounds($aArray, 5) & @CRLF) ; Returns False as the Array has 5 items but starts from the 0th index not 1st.
ConsoleWrite(_IsInBounds($aArray, 0) & @CRLF) ; Returns True.
If _IsInBounds($aArray, 4) Then
MsgBox($MB_SYSTEMMODAL, '', 'Position 4 contains the value: "' & $aArray[4] & '"')
EndIf
Func _IsInBounds(ByRef Const $aArray, $iIndex)
Local $iDim = UBound($aArray, 0)
If $iDim < 0 Or $iDim > 2 Then ; If not a 1D or 2D Array, then return -1 and set @error to non-zero.
Return SetError(1, 0, False)
EndIf
Return $iIndex < UBound($aArray, 1)
EndFunc ;==>_IsInBounds
_MultiFileListToArray
Author: Valuater
; Multiple File List to Array
$Files_List = _MultiFileListToArray(@ScriptDir, "*.txt|*.ini")
; for display only
$GUI = GUICreate(" _MultiFileListToArray - DEMO")
$Edit1 = GUICtrlCreateEdit("", 50, 50, 300, 300)
For $x = 1 To UBound($Files_List) - 1
GUICtrlSetData(-1, $Files_List[$x] & @CRLF, 1)
Next
GUISetState()
While GUIGetMsg() <> -3
WEnd
; end display only
Func _MultiFileListToArray($sPath, $sFilter = "*", $iFlag = 0)
Local $hSearch, $sFile, $asFileList[1], $sCount
If Not FileExists($sPath) Then Return SetError(1, 1, "")
If (StringInStr($sFilter, "\")) Or (StringInStr($sFilter, "/")) Or (StringInStr($sFilter, ":")) Or (StringInStr($sFilter, ">")) Or (StringInStr($sFilter, "<")) Or (StringStripWS($sFilter, 8) = "") Then Return SetError(2, 2, "")
$sFilter = (StringSplit($sFilter, "|"))
If Not ($iFlag = 0 Or $iFlag = 1 Or $iFlag = 2) Then Return SetError(3, 3, "")
For $sCount = 1 To $sFilter[0]
$hSearch = FileFindFirstFile($sPath & "\" & $sFilter[$sCount])
If $hSearch = -1 Then
If $sCount = $sFilter[0] Then Return SetError(4, 4, $asFileList)
ContinueLoop
EndIf
While 1
$sFile = FileFindNextFile($hSearch)
If @error Then
SetError(0)
ExitLoop
EndIf
If $iFlag = 1 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") <> 0 Then ContinueLoop
If $iFlag = 2 And StringInStr(FileGetAttrib($sPath & "\" & $sFile), "D") = 0 Then ContinueLoop
ReDim $asFileList[UBound($asFileList) + 1]
$asFileList[0] = $asFileList[0] + 1
$asFileList[UBound($asFileList) - 1] = $sFile
WEnd
FileClose($hSearch)
Next
Return $asFileList
EndFunc ;==>_MultiFileListToArray
Return Min or Max Number From One or Two Arrays
Author: GaryFrost
#include <Array.au3>
Func _MinMaxa($a_nums01, $MaxFlag = 0, $a_nums02 = 0)
If Not IsArray($a_nums01) Then
SetError(1)
Return (0)
EndIf
If @NumParams = 3 Then
If Not IsArray($a_nums02) Then
SetError(3)
Return (0)
EndIf
EndIf
Local $idx
For $idx = 0 To UBound($a_nums01) - 1
If StringIsFloat($a_nums01[$idx]) Or StringIsInt($a_nums01[$idx]) Then
$a_nums01[$idx] = Number($a_nums01[$idx])
Else
SetError(2)
Return (0)
EndIf
Next
_ArraySort($a_nums01, $MaxFlag)
If @NumParams = 3 Then
For $idx = 0 To UBound($a_nums02) - 1
If StringIsFloat($a_nums02[$idx]) Or StringIsInt($a_nums02[$idx]) Then
$a_nums02[$idx] = Number($a_nums02[$idx])
Else
SetError(4)
Return (0)
EndIf
Next
_ArraySort($a_nums02, $MaxFlag)
If $MaxFlag Then
If Number($a_nums01[0]) > Number($a_nums02[0]) Then
Return $a_nums01[0]
Else
Return $a_nums02[0]
EndIf
Else
If Number($a_nums01[0]) < Number($a_nums02[0]) Then
Return $a_nums01[0]
Else
Return $a_nums02[0]
EndIf
EndIf
EndIf
Return $a_nums01[0]
EndFunc ;==>_MinMaxa