Verzeichnis recursiv scannen

Schnipsel, Ideen und Lösungsvorschläge

Verzeichnis recursiv scannen

Beitragvon nibbana » Mi 4. Jan 2006, 20:42

Ein Modul zum einlesen der Datein in einem Verzeichnisbaum.

Code: Alles auswählen
' Gambas module file glob.module

' Verzeichnis nach Fileendungen scannen
' path = Startverzeichnis
' pattern = Endungen in einem String[]
' depth = maximale Suchtiefe

FUNCTION glob(path AS String, OPTIONAL pattern AS String[] = ["*"], OPTIONAL depth AS Integer = 255) AS String[]

  DIM info AS Stat
  DIM result AS NEW String[]
  DIM file, i, path2 AS String
  DIM file2 AS file

  IF depth <= 0 THEN
    RETURN result
  ENDIF

  DEC depth

  FOR EACH file IN Dir(path)
    path2 = path &/ file
    info = Stat(path2)
    IF info.type = gb.Directory THEN
      result = appendArray(glob(path2, pattern, depth), result)
    ELSE IF info.type = gb.File THEN
      IF checkExtension(getExtension(path2), pattern) THEN
        result.Push(path2)
      ENDIF
    END IF
  NEXT

  RETURN result

END

PRIVATE FUNCTION getExtension(name AS String) AS String

  DIM idx AS Integer

  idx = RInStr(name, ".")
  IF idx THEN
    RETURN Mid$(name, idx + 1)
  ELSE
    RETURN ""
  ENDIF

END


PRIVATE FUNCTION appendArray(src AS String[], dst AS String[]) AS String[]
  DIM s AS String

  FOR EACH s IN src
    dst.push(s)
  NEXT

  RETURN dst
END


PRIVATE FUNCTION checkExtension(ext AS String, pattern AS String[]) AS Boolean
  DIM s AS String

  ext = Lower$(ext)
  FOR EACH s IN pattern
    IF ext LIKE s THEN
      RETURN TRUE
    ENDIF
  NEXT

  RETURN FALSE

END


Beispiel für einen Aufruf

Code: Alles auswählen
' Gambas class file main.class

STATIC PUBLIC SUB Main()
  DIM files AS String[]
  DIM file AS String

  files = glob.glob("/home/thomas/Documents", ["jpg", "png"])

  FOR EACH file IN files
    PRINT file
  NEXT

END


mfg. nibbana
"Ich denke, also bin ich." (Descartes)

"Ich denke nicht, also was?" (Zen Meister Seung Sahn)
nibbana
Foriker
 
Beiträge: 143
Registriert: Fr 16. Dez 2005, 21:32

Vorschlag zu Extension

Beitragvon Anonymous » Mi 4. Jan 2006, 21:08

Hi nibbana

Gambas kann schon die Extension aus Dateiname extrahieren:

--- snipp ----
Ext
STATIC FUNCTION Ext ( FileName AS String ) AS String
Returns the extension of a file name.

--- snipp ----

Gruss, staudi
Anonymous
 

Beitragvon nibbana » Mi 4. Jan 2006, 21:16

Theoretisch ja. Aber Ext läuft bei mir nicht "Unknown identifier: Ext".
Ich habe zwar eine Weg gefunden aber dazu muß ich die Datei mit OPEN öffnen. Und wer öffnet schon eine Datei die er nicht braucht.

mfg. nibbana
"Ich denke, also bin ich." (Descartes)

"Ich denke nicht, also was?" (Zen Meister Seung Sahn)
nibbana
Foriker
 
Beiträge: 143
Registriert: Fr 16. Dez 2005, 21:32


Zurück zu Schnipsel / HOWTO's

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 1 Gast