Live-Forum - Die aktuellen Beiträge
Anzeige
Anzeige
HERBERS
Excel-Forum (Archiv)
20+ Jahre Excel-Kompetenz: Von Anwendern, für Anwender
Inhaltsverzeichnis

Datei-Suche (case-sensitive) mit Wildcards

Forumthread: Datei-Suche (case-sensitive) mit Wildcards

Datei-Suche (case-sensitive) mit Wildcards
21.12.2016 11:14:05
Rainer
Hallo liebes Forum,
ich habe folgendes Problem: über die Dir$-Funktion ist ja grunds. eine Suche nach Dateinamen unter Verwendung von Wildcards möglich. Die Suche scheint aber keinen Unterschied zwischen Groß- und Kleinschreibung bei Dateinamen zu machen. Ich habe nun in einem Verzeichnis Dateien z.B wie "99990101rb - OTk5OTAxMDFyYg.xml" und "99990101RB - OTk5OTAxMDFSQg.xml", die ich über den Teil vor dem " - " eindeutig identifizieren möchte, da die gefundenen Dateien umkopiert werden sollen.
Gibt es eine Möglichkeit, dies zu erreichen? Die fileexists-Methode scheint case-sensitive zu sein, arbeitet aber offenbar nicht mit Wildcards.
Vielen Dank schon mal!
Freundliche Grüße,
Rainer
Anzeige

8
Beiträge zum Forumthread
Beiträge zu diesem Forumthread

Betreff
Datum
Anwender
Anzeige
AW: Datei-Suche (case-sensitive) mit Wildcards
21.12.2016 11:42:25
Rudi
Hallo,
Gibt es eine Möglichkeit
ja.
Prüfe ob der gefundene Dateineme mit seiner Klein(oder Groß)schreibung übereinstimmt.
sFile=dir(*-*.xml)
if split(sfile,"-")(0)=lcase(split(sfile,"-")(0)) Then
Gruß
Rudi
AW: Datei-Suche (case-sensitive) mit Wildcards
21.12.2016 12:00:34
Rainer
Hallo Rudi,
danke für die schnelle Antwort! Ich hätte wohl besser schreiben sollen, dass ich eine Excel-Tabelle habe, in der die "führenden Teile" der xml-Dateien stehen, also in meinem Beispiel "99990101rb" und "99990101RB". Ich versuche nun, genau die eine zugehörige Datei zu identifizieren, wobei mir die dir-Funktion von vornherein ein falsches Resultat liefert (Dir("99990101rb") liefert z.B. "99990101RB" zurück); dann komme ich auch mit split nicht weiter.
Lässt sich diesbezgl. etwas machen?
Grüße,
Rainer
Anzeige
AW: Datei-Suche (case-sensitive) mit Wildcards
21.12.2016 12:25:51
Rudi
Hallo,
wobei mir die dir-Funktion von vornherein ein falsches Resultat liefert
bei mir nicht.
Gruß
Rudi
Filenamen sind NICHT casesensitiv
21.12.2016 12:16:03
EtoPHG
Hallo Rainer,
Zitat: die ich über den Teil vor dem " - " eindeutig identifizieren möchte,
Das ist Dein Problem, dass du wohl programmatisch nicht lösen kannst.
Auf dem Filesystem, geht die Case-Sensivität verloren!
Du kannst auf dem gleichen Verzeichnis nicht "TeSt.txt" und "test.txt" abspeichern!
Gruess Hansueli
Anzeige
AW: Filenamen sind NICHT casesensitiv
21.12.2016 13:13:14
Rainer
Hallo Hansueli,
du hat Recht - "TeSt.txt" und "test.txt" lassen sich nicht gleichzeitig abspeichern. Es ist aber in dem beschriebenen Fall so, dass es im Dateisystem tatsächlich mehrere Dateien gibt, die sich im vorangestellten Teil (vor dem "-") nur in Groß- und Kleinschreibung unterscheiden, weil eben der nachfolgende Teil unterschiedlich ist.
Der nachfolgende Teil des Dateinamens wird m.W. durch einen Hash-Algorithmus aus dem Dateinamen gebildet und ist mit VBA-Mitteln nicht ohne weiteres reproduzierbar.
Nochmal an einem konkreten Beispiel: ich suche eine Methode, um ausgehend vom String "99990101rb" und eine Suche nach ""99990101rb*.xml" genau die eine zugehörige Datei "99990101rb - OTk5OTAxMDFyYg.xml" zu finden, aber nicht "99990101RB - OTk5OTAxMDFSQg.xml".
Freundliche Grüße,
Rainer
Anzeige
AW: Filenamen sind NICHT casesensitiv
21.12.2016 13:46:59
Michael
Hallo!
Nochmal an einem konkreten Beispiel:
Sub a()
Dim Pfad As String: Pfad = "U:\Test\"
Dim Such$, Datei$, Vgl$
Such = "9990101rb"
Datei = Dir(Pfad & "*.txt")
Do While Datei  vbNullString
Vgl = Left(Datei, Len(Such))
If Vgl Like Such Then Debug.Print Datei
Datei = Dir
Loop
End Sub
Funktioniert doch einwandfrei?!
LG
Michael
Anzeige
AW: Filenamen sind NICHT casesensitiv
21.12.2016 14:04:42
Rainer
Hallo Michael,
wunderbar - hat funktioniert! Vielen Dank!
LG, Rainer
Gern, owT
21.12.2016 16:32:20
Michael
;
Anzeige

Infobox / Tutorial

Datei-Suche (case-sensitive) mit Wildcards in Excel VBA


Schritt-für-Schritt-Anleitung

  1. Verzeichnis festlegen: Zuerst musst du den Pfad des Verzeichnisses angeben, in dem du nach Dateien suchen möchtest. Setze dazu eine String-Variable für den Pfad.

    Dim Pfad As String
    Pfad = "U:\Test\"
  2. Suchbegriff definieren: Lege den Suchbegriff fest, nach dem du suchen möchtest. Zum Beispiel:

    Dim Such As String
    Such = "99990101rb"
  3. Dateisuche mit Wildcards: Verwende die Dir-Funktion, um alle Dateien im Verzeichnis zu durchlaufen. Hierbei kannst du Wildcards einsetzen.

    Dim Datei As String
    Datei = Dir(Pfad & "*.xml")
  4. Vergleich der Dateinamen: Um die Groß- und Kleinschreibung zu vergleichen, kannst du die Like-Anweisung verwenden.

    Do While Datei <> vbNullString
       If Left(Datei, Len(Such)) Like Such Then
           Debug.Print Datei
       End If
       Datei = Dir
    Loop

Häufige Fehler und Lösungen

  • Problem: Die Dir-Funktion gibt nicht die erwartete Datei zurück.

    • Lösung: Stelle sicher, dass du die Wildcards korrekt verwendest und dass der Suchbegriff exakt mit dem Anfang des Dateinamens übereinstimmt.
  • Problem: Die Suche ignoriert die Groß- und Kleinschreibung.

    • Lösung: Nutze die Like-Anweisung, um eine case-sensitive Suche durchzuführen, wie im obigen Beispiel gezeigt.

Alternative Methoden

Wenn du eine alternative Methode zur Datei-Suche in Excel VBA ausprobieren möchtest, kannst du die FileSystemObject-Klasse verwenden:

Dim fso As Object
Set fso = CreateObject("Scripting.FileSystemObject")

Dim file As Object
For Each file In fso.GetFolder(Pfad).Files
    If file.Name Like "99990101rb*.xml" Then
        Debug.Print file.Name
    End If
Next file

Diese Methode kann einfacher sein, um durch das Verzeichnis zu navigieren und bietet mehr Flexibilität.


Praktische Beispiele

Hier ist ein konkretes Beispiel, wie du eine Datei mit einer spezifischen Groß- und Kleinschreibung suchen kannst. In diesem Fall suchst du nach den XML-Dateien, die mit "99990101rb" beginnen:

Sub SucheDateien()
    Dim Pfad As String: Pfad = "U:\Test\"
    Dim Such As String: Such = "99990101rb"
    Dim Datei As String
    Datei = Dir(Pfad & "*.xml")

    Do While Datei <> vbNullString
        If Left(Datei, Len(Such)) Like Such Then
            Debug.Print Datei
        End If
        Datei = Dir
    Loop
End Sub

Tipps für Profis

  • Verwendung von Wildcards: In VBA sind die Platzhalter * (beliebig viele Zeichen) und ? (ein einzelnes Zeichen) die gängigen Wildcards. Achte darauf, diese korrekt zu verwenden, um die gewünschten Ergebnisse zu erzielen.

  • Debugging: Nutze Debug.Print, um die Ergebnisse deiner Dateisuche in der Direktansicht anzuzeigen. So kannst du schnell überprüfen, ob dein Code die richtigen Dateien findet.

  • Leistungsoptimierung: Wenn du große Verzeichnisse durchsuchst, überlege, ob du die FileSystemObject-Methode verwendest, da sie in der Regel schneller ist.


FAQ: Häufige Fragen

1. Welche Wildcards kann ich in VBA verwenden? Du kannst die Wildcards * und ? verwenden. * steht für beliebig viele Zeichen, während ? für genau ein Zeichen steht.

2. Wie kann ich eine case-sensitive Suche in VBA durchführen? Verwende die Like-Anweisung, um sicherzustellen, dass die Groß- und Kleinschreibung beachtet wird.

3. Kann ich auch nach Dateitypen filtern? Ja, indem du die Wildcards in der Dir-Funktion verwendest, kannst du gezielt nach bestimmten Dateitypen suchen, z.B. *.xml für XML-Dateien.

Beliebteste Forumthreads (12 Monate)

Anzeige
Anzeige
Entdecke mehr
Finde genau, was du suchst

Die erweiterte Suchfunktion hilft dir, gezielt die besten Antworten zu finden

Suche nach den besten Antworten
Unsere beliebtesten Threads

Entdecke unsere meistgeklickten Beiträge in der Google Suche

Top 100 Threads jetzt ansehen
Anzeige