Hi Leute !
Nichts wildes!
Habe hir drei kleine Helfe Funktionen, vieleicht braucht sie ja jemand!
1._ArrayFilter: ausgabe der durch angabe eines Filter 1D/2D
2._Arrayfreememory: ausgabe der leeren Index´e oder angabe in % für frei/belegt/anzal der gefundenen
3.Choose: ausgabe von übergeben Index eines Array oder String
Beispiel:
Spoiler anzeigen
#include 'Array.au3'
#include 'FFC_Array.au3'
Dim $TestA[10000][8]
For $i = 0 To 9999
$TestA[$i][0] = Chr(Random(65, 90, 1)) & Chr(Random(65, 80, 1))
$TestA[$i][1] = Chr(Random(65, 68, 1)) & Chr(Random(65, 72, 1))
$TestA[$i][2] = Chr(Random(65, 78, 1)) & Chr(Random(65, 90, 1))
$TestA[$i][3] = Chr(Random(65, 90, 1)) & Chr(Random(65, 68, 1))
$TestA[$i][4] = Chr(Random(65, 90, 1)) & Chr(Random(65, 80, 1))
$TestA[$i][5] = Chr(Random(65, 68, 1)) & Chr(Random(65, 72, 1))
$TestA[$i][6] = Chr(Random(65, 78, 1)) & Chr(Random(65, 90, 1))
$TestA[$i][7] = Chr(Random(65, 90, 1)) & Chr(Random(65, 68, 1))
Next
_ArrayDisplay($TestA, ' Vorher ')
MsgBox(0, 0, 'Start _ArrayFilter()', 2)
Local $iTimer = TimerInit()
Dim $TEst = _ArrayFilter($TestA, 'AC')
MsgBox(0, 0, 'End _ArrayFilter()' & @TAB & 'Time : ' & Round(TimerDiff($iTimer)), 4)
_ArrayDisplay($TEst, 'Nachher')
MsgBox(0, 0, 'Start _Arrayfreememory() ausgaben memory', 2)
Local $iTimer = TimerInit()
Dim $was = _Arrayfreememory($TEst, 1)
MsgBox(0, 0, 'End _Arrayfreememory() ' & $was[0] & @TAB & 'Time : ' & Round(TimerDiff($iTimer)), 4)
MsgBox(0, 0, 'Start _Arrayfreememory() ausgaben Arraymemory mit den gefundenen Index', 2)
Local $iTimer = TimerInit()
Dim $was = _Arrayfreememory($TEst)
_ArrayDisplay($was, Round(TimerDiff($iTimer)))
MsgBox(0, 0, '_Choose($TEst , (Array 1) ,(SubArray 1)) = ' & Choose($TestA, 1, 1), 4)
Code:
Spoiler anzeigen
; #FUNCTION# ;=============================================================================================
;
; Name...........: _ArrayFilter
; Description ...: Filtert nach dem gewünschen Kriterien
; Syntax.........: _ArrayFilter(ByRef [$aInput, [$value]])
; Parameters ....: $aInput - Array1D o. Array2D / $value - nach den angegebenen Kriterien wobei leer string
; nicht als Filter angenommen wird.
; Return values .: Erfolg - 1D-Array o. Array2D mit den Gefilterten Ergebnisse mit neu angepassten Index
;
; Fehler - Gibt -1 zurück und setzt @error:
; |1 - Keine Array / Kriterium nicht übergeben
; |0 - wenn keine Übereinstimmung
;
; Author ........: Kleiner (http://www.AutoIT.de)
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......; H_Index_A() - Hilfe Index
; ;=========================================================================================================
Func _ArrayFilter(ByRef $aInput, $value)
If Not IsArray($aInput) Then Return SetError(1, 0, -1)
If Not $value Then Return SetError(2, 0, -1)
Local $aIndex
Local $UB = UBound($aInput)
Local $UB_2D = UBound($aInput, 2)
If (@error = 2) Then
For $i = 0 To $UB - 1
If ($aInput[$i] = $value) Then $aIndex &= '|' & $i
Next
If $aIndex Then Return StringSplit(StringTrimLeft($aIndex, 1), '|')
Else
For $i = 0 To $UB - 1
For $e = 0 To $UB_2D - 1
If ($aInput[$i][$e] = $value) Then $aIndex &= ';' & $i & '|' & $e
Next
Next
If $aIndex Then
Dim $iIn, $iIn_n
$aIndex = StringSplit(StringTrimLeft($aIndex, 1), ';')
Dim $F_Array[$aIndex[0]][$UB_2D]
For $i = 1 To $aIndex[0]
$iIn = StringSplit($aIndex[$i], '|')
$iIn_n = H_Index_A($F_Array, $iIn[2])
$F_Array[$iIn_n][$iIn[2]] = $aInput[$iIn[1]][$iIn[2]]
Next
ReDim $F_Array[$iIn_n + 1][$UB_2D]
Return $F_Array
EndIf
EndIf
Return SetError(1, 0, 0)
EndFunc ;==>_ArrayFilter
Func H_Index_A(ByRef $F_Array, $value)
For $i = 0 To UBound($F_Array) - 1
If Not $F_Array[$i][$value] Then Return $i
Next
EndFunc ;==>H_Index_A
; #FUNCTION# ;=============================================================================================
;
; Name...........: _Arrayfreememory
; Description ...: Gib den Freien | Belegten | Gefundene (Gesamt) u. wenn gewünscht Index
; Syntax.........: _Arrayfreememory(ByRef [$aData, [$nMem = 0]])
; Parameters ....: $aData - Array1D o. Array2D / $nMem - 0/ für nur ausgaben in % Frei|Belegt|(G)Anzal
; 1/ mit Index an welcher stelle sich der lerre
; Index befindet.
; Return values .: Erfolg - 1D-Array mit zB. 15% |85% | 180
;
; Fehler - Gibt -1 zurück und setzt @error:
; |1 - Keine Array
; |0 - wenn keine leer Index gefunden
;
; Author ........: Kleiner (http://www.AutoIT.de)
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ;=========================================================================================================
Func _Arrayfreememory(ByRef $aData, $nMem = 0)
If Not IsArray($aData) Then Return SetError(1, 0, -1)
Local $aIndex
Local $UB = UBound($aData)
Local $UB_2D = UBound($aData, 2)
If (@error = 2) Then
For $i = 0 To $UB - 1
If Not $aData[$i] Or ($aData[$i] = ' ') And Not IsNumber($aData[$i]) Then $aIndex &= '|' & $i
Next
If $aIndex Then
$aIndex = StringSplit(StringTrimLeft($aIndex, 1), '|')
Dim $Freememory[UBound($aIndex)]
Dim $Free_M = Round(($UB * 100) / ($aIndex[0]), 3)
$Freememory[0] = $Free_M & '% | ' & (100 - $Free_M) & '% | ' & $aIndex[0]
If $nMem Then
ReDim $Freememory[1]
Return $Freememory
Else
For $i = 1 To $aIndex[0]
$Freememory[$i] = $aIndex[$i]
Next
Return $Freememory
EndIf
EndIf
Else
For $i = 0 To $UB - 1
For $e = 0 To $UB_2D - 1
If Not $aData[$i][$e] Or ($aData[$i][$e] = ' ') And Not IsNumber($aData[$i][$e]) Then $aIndex &= ';' & $i & '|' & $e
Next
Next
If $aIndex Then
$aIndex = StringSplit(StringTrimLeft($aIndex, 1), ';')
Dim $Freememory[UBound($aIndex)]
Dim $Free_M = Round((($aIndex[0] * 100) / ($UB * $UB_2D)), 3)
$Freememory[0] = $Free_M & '% | ' & (100 - $Free_M) & '% | ' & $aIndex[0]
If $nMem Then
ReDim $Freememory[1]
Return $Freememory
Else
For $i = 1 To $aIndex[0]
$Freememory[$i] = $aIndex[$i]
Next
Return $Freememory
EndIf
EndIf
EndIf
Return SetError(1, 0, 0)
EndFunc ;==>_Arrayfreememory
; #FUNCTION# ;=============================================================================================
;
; Name...........: Choose
; Description ...: Gib änlich wie bei GUICtrlRead von einem Array den Inhalt wieder o. wie bei StringSplit
; könnte man auch nennen StringToArray , die stelle aus, die im Index/SubIndex übergeben.
; Syntax.........: Choose($a_sData, Const $index = 1, Const $Sub_Index = 0, $Delim = ',')
; Parameters ....: $a_sData - Array1D o. Array2D o. String / $index für 1D / $Sub_Index für 2D / $Delim zum trennen
; des String
;
; Return values .: Erfolg - ausgabe vom Gewünschten Index(Inhalt)
;
; Fehler - $index/SubIndex größer als UBound
;
; Author ........: Kleiner (http://www.AutoIT.de)
; Modified.......:
; Remarks .......:
; Related .......:
; Link ..........;
; Example .......;
; ;=========================================================================================================
Func Choose($a_sData, Const $index = 1, Const $Sub_Index = 0, $Delim = ',')
If IsArray($a_sData) Then
If ($index > UBound($a_sData) - 1) Then Return 0
Local $UB = UBound($a_sData, 2)
If (@error = 2) Then
Return $a_sData[$index]
Else
If ($Sub_Index > $UB - 1) Then Return 0
Return $a_sData[$index][$Sub_Index]
EndIf
Else
If Not $a_sData Then Return 0
Local $sSplit = StringSplit($a_sData, $Delim)
If ($index > UBound($sSplit) - 1) Then Return 0
Return $sSplit[$index + 1]
EndIf
EndFunc ;==>Choose
Viel spass!
Lg Kleiner