_FileListToArray: zwei dateiendungen von dateien filtern

  • guten abend

    ich will bei der funktion

    [autoit]

    _FileListToArray

    [/autoit]

    zwei dateiendungen von dateien in der liste gefiltert bekommen
    so hat es leider nicht funktioniert

    [autoit]

    _FileListToArray("","{*.jpg;*.png}",1)

    [/autoit]


    ungern würde ich zwei mal getrennt auslesen. oder muss ich das?

    ich würde mich freuen wenn mir jemand weiterhelfen könnte

    Einmal editiert, zuletzt von gem (28. Juli 2012 um 17:26)

  • Oder eben die komplette Dateiliste einlesen und das Ergebnis array danach filtern.

    Vorteil im Vergleich zu AspirinJunkie oder auch dem mehrmaligen Einsatz von filelisttoarray wäre, dass die Zahl der Festplattenzugriffe minimiert wird sofern der Filter vom User mehrmals aufgerufen werden muss/soll, da die komplette Dateiliste nur einmal eingelesen wird und danach beliebig oft neue gefilterte Arrays erstellt werden können.

    Spoiler anzeigen
    [autoit]


    #include <array.au3>
    #include <file.au3>

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

    $path = "c:\windows"

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

    $aTemp = _FileListToArray($path,"*",1)

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

    $aFiles = filterArray($aTemp,"ext","bmp|exe|jpg|png|dll",1)
    if $aFiles < 0 then
    msgbox(0,"Fehler","Fehlercode: " & $aFiles)
    else
    _arraydisplay($aFiles)
    endif

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

    #cs
    Func filterarray()

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

    $mode: Kann "ext" oder "name" sein, jenachdem ob die Dateiendung oder der gesamte Dateiname gefiltert werden soll
    $sString: Der zu suchende String, bei mehreren Suchstrings müssen diese mit "|" getrennt werden

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

    Return Values:

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

    Gibt ein 1D Array zurück mit Basis 0

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

    Fehler:
    -1 Kein gültiges Array
    -2 Array Dimension > 1
    -3 $startIndex > als gegebenes Array
    -4 $mode ist ungültig
    -5 Keine Suchergebnisse

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

    #ce
    func filterarray(ByRef $aFilter,$mode,$sString,$startIndex=0)

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

    if not isarray($aFilter) then return -1
    If UBound($aFilter,0) > 1 Then Return -2
    if $startindex > ubound($aFilter)-1 then return -3
    if $mode <> "ext" and $mode <> "name" then return -4
    if $sString = "" then return $aFilter

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

    local $aReturn[ubound($aFilter)]
    local $count=0
    local $split = False
    local $temp

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

    if stringinstr($sString,"|") then
    $split = True
    local $aSplit = stringsplit($sString,"|")
    endif

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

    for $i=$startIndex to ubound($aFilter)-1
    if $mode="ext" then
    if $split = True then
    for $j=1 to $aSplit[0]
    $temp = stringright($aFilter[$i],stringlen($aSplit[$j]))
    if $temp = $aSplit[$j] then
    $aReturn[$count]=$aFilter[$i]
    $count+=1
    exitloop
    endif
    next
    else
    $temp = stringright($aFilter[$i],stringlen($sString))
    if $temp = $sString then
    $aReturn[$count]=$aFilter[$i]
    $count+=1
    continueloop
    endif
    endif
    else
    if $split = True then
    for $j=1 to $aSplit[0]
    if stringinstr($aFilter[$i],$aSplit[$j]) then
    $aReturn[$count]=$aFilter[$i]
    $count+=1
    exitloop
    endif
    next
    else
    if stringinstr($aFilter[$i],$sString) then
    $aReturn[$count]=$aFilter[$i]
    $count+=1
    continueloop
    endif
    endif
    endif
    next

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

    if $count = 0 then
    return -5
    else
    redim $aReturn[$count]
    return $aReturn
    endif

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

    endfunc

    [/autoit]

    4 Mal editiert, zuletzt von misterspeed (28. Juli 2012 um 13:10)