Hallo
für einige von euch ist das sicher ein leichtes, aber ich beiss mir grad die Zähne aus.
Vor geraumer Zeit hab ich mir, mit eurer Hilfe, ein Pattern für StringRegExp() gebastelt, dass mir für _RecursiveFileListToArray() nur Dateien mit einer bstrimmten Endung auflistet.
Jetzt möchte ich das gerne erweitern, damit mehrere Endungen erkannt werden. Aber das bekomm ich einfach nicht hin.
C
; bisheriger Funktionsaufruf, der mir nur .txt-Files auflistet...
Local $sDaten = _RecursiveFileListToArray("E:\Daten", "txt")
; tatsächliches Pattern sieht so aus
; $sPattern = "txt" <--- für den einfachen Aufruf
; $sPattern = "(?i)[\w\.]+." & $sPattern & "$" <--- so steht dann das Pattern in der Funktion
Func _RecursiveFileListToArray($sPath, $sPattern, $iFlag = 1, $iFormat = 1, $sDelim = @CRLF)
;===========================================================================================
; Description:: gibt Verzeichnisse und/oder Dateien (rekursiv) zurück, die
; einem RegExp-Pattern entsprechen
; Parameter(s): $sPath = Startverzeichnis
; $sPattern = ein beliebiges RexExp-Pattern für die Auswahl
; $iFlag = Auswahl
; $iFlag = 0 = Dateien & Verzeichnisse
; $iFlag = 1 = nur Dateien
; $iFlag = 2 = nur Verzeichnisse
; $iFormat = Rückgabeformat
; $iFormat = 0 = String
; $iFormat = 1 = Array mit [0] = Anzahl
; $iFormat = 2 = Nullbasiertes Array
; $sDelim = Trennzeichen für die String-Rückgabe
; Requirement(s): AutoIt 3.3.0.0
; Return Value(s): Array/String mit den gefundenen Dateien/Verzeichnissen
; Author(s): Oscar (http://www.autoit.de)
; Anregungen von: bernd670 (http://www.autoit.de)
;===========================================================================================
$sPattern = "(?i)[\w\.]+." & $sPattern & "$" ; <--- von mir eingefügt für einfacheren Funktionsaufruf
Local $hSearch, $sFile, $sReturn = ''
If StringRight($sPath, 1) <> '\' Then $sPath &= '\'
$hSearch = FileFindFirstFile($sPath & '*.*')
If @error Or $hSearch = -1 Then Return SetError(0, 0, $sReturn)
While True
$sFile = FileFindNextFile($hSearch)
If @error Then ExitLoop
If StringInStr(FileGetAttrib($sPath & $sFile), 'D') Then
If StringRegExp($sPath & $sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 2) Then $sReturn &= $sPath & $sFile & '\' & $sDelim
$sReturn &= _RecursiveFileListToArray($sPath & $sFile & '\', $sPattern, $iFlag, 0)
ContinueLoop
EndIf
If StringRegExp($sFile, $sPattern) And ($iFlag = 0 Or $iFlag = 1) Then $sReturn &= $sPath & $sFile & $sDelim
WEnd
FileClose($hSearch)
If $iFormat Then Return StringSplit(StringTrimRight($sReturn, StringLen($sDelim)), $sDelim, $iFormat)
Return $sReturn
EndFunc ;==>_RecursiveFileListToArray
Alles anzeigen
Kann das Pattern so abgeändert werden, dass nicht nur .txt-Files gefunden werden?
C
;Im idealfall würd ich gerne die Funktion so aufrufen können, wobei die Endungen variabel sein sollen
Local $sDaten = _RecursiveFileListToArray("E:\Daten, "txt,pdf,doc,html")
Habe bereits erfolglos versucht, in der Funktion selbst rumzupfuschen und work-arounds einzubauen, aber das ist doch Knete...
Könnt ihr mir helfen? Wie muss das Pattern aussehen, damit ich auch (optional) mehrere Dateiendungen finde?