Drei kleine Helfer ( ArrayFilter,Arrayfreememory,Choose)

  • 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
    [autoit]

    #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

    [/autoit] [autoit][/autoit] [autoit]

    _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)

    [/autoit]


    Code:

    Spoiler anzeigen
    [autoit]

    ; #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

    [/autoit] [autoit][/autoit] [autoit]

    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

    [/autoit]

    Viel spass!

    Lg Kleiner

  • Hallo Kleiner.
    Du hast 3 wirklich gute Funktionen gemacht.
    ArrayFilter gefällt mir besonders, da man es oft gebrauchen kann.
    ArrayFreeMemory ist auch cool da es ausgibt wo der Array leere Stellen hat.
    MfG. PrideRage

    Meine Projekte:
    ClipBoard Manager (beendet)
    Gutes ClipBoard Verwaltungs Programm mit nützlichen Funktionen.

    HTML Creator (beendet)
    Nützliches Tool um schnell ein eigenes HTML Dokument zu erstellen.