Computerwissenschaften

Verwenden von Glob mit Verzeichnissen in Ruby

Mit “ Globbing. -Dateien (mit Dir.glob ) in Ruby können Sie nur die gewünschten Dateien auswählen, z. B. alle XML-Dateien in einem bestimmten Verzeichnis. Obwohl Dir.blog  ist wie  reguläre Ausdrücke, ist es nicht. Es ist im Vergleich zu den regulären Ausdrücken von Ruby sehr begrenzt und steht in engerem Zusammenhang mit Platzhaltern für die Shell-Erweiterung.

Das Gegenteil von Globbing, bei dem alle Dateien in einem Verzeichnis durchlaufen  werden , kann mit der Dir.foreach- Methode ausgeführt werden.

 

Beispiel

Der folgende Glob stimmt mit allen Dateien überein, die im aktuellen Verzeichnis auf .rb enden . Es wird ein einzelner Platzhalter verwendet, das Sternchen. Das Sternchen stimmt mit null oder mehr Zeichen überein, sodass jede Datei, die mit .rb endet , mit diesem Glob übereinstimmt, einschließlich einer Datei mit dem Namen einfach .rb , ohne dass vor der Dateierweiterung und dem vorhergehenden Punkt nichts steht. Die glob-Methode gibt alle Dateien, die den globbing-Regeln entsprechen, als Array zurück, das zur späteren Verwendung gespeichert oder wiederholt werden kann.


 #! / usr / bin / env ruby

 


 

 Dir.glob ('*. Rb'). Jeder do | f |

 

 setzt f

 

 Ende

 

Platzhalter und mehr

Es gibt nur wenige Platzhalter zu lernen:

    • * – Entspricht null oder mehr Zeichen. Ein Glob, der nur aus dem Sternchen und keinen anderen Zeichen oder Platzhaltern besteht, stimmt mit allen Dateien im aktuellen Verzeichnis überein. Das Sternchen wird normalerweise mit einer Dateierweiterung kombiniert, wenn nicht mehr Zeichen, um die Suche einzugrenzen.
    • ** – Alle Verzeichnisse rekursiv abgleichen. Dies wird verwendet, um in den Verzeichnisbaum abzusteigen und alle Dateien in Unterverzeichnissen des aktuellen Verzeichnisses zu finden, anstatt nur Dateien im aktuellen Verzeichnis. Dieser Platzhalter wird im folgenden Beispielcode erläutert.
    • ? – Entspricht einem beliebigen Zeichen. Dies ist nützlich, um Dateien zu finden, deren Name in einem bestimmten Format vorliegt. Zum Beispiel könnten 5 Zeichen und eine .xml-Erweiterung als ?????. Xml ausgedrückt werden .
    • [az] – Entspricht einem beliebigen Zeichen im Zeichensatz. Der Satz kann entweder eine Liste von Zeichen oder ein durch das Bindestrichzeichen getrennter Bereich sein. Zeichensätze folgen der gleichen Syntax wie Zeichensätze in regulären Ausdrücken und verhalten sich genauso wie Zeichensätze.
    • {a, b} – Übereinstimmungsmuster a oder b. Dies sieht zwar wie ein Quantifizierer für reguläre Ausdrücke aus, ist es aber nicht. Im regulären Ausdruck entspricht das Muster a {1,2} beispielsweise 1 oder 2 ‚a‘-Zeichen. Beim Globbing stimmt es mit der Zeichenfolge a1 oder a2 überein . Andere Muster können innerhalb dieses Konstrukts verschachtelt sein.

 

Eine zu berücksichtigende Sache ist die Groß- und Kleinschreibung. Es ist Sache des Betriebssystems, zu bestimmen, ob TEST.txt und TeSt.TxT auf dieselbe Datei verweisen. Unter Linux und anderen Systemen sind dies unterschiedliche Dateien. Unter Windows beziehen sich diese auf dieselbe Datei.

Das Betriebssystem ist auch für die Reihenfolge verantwortlich, in der die Ergebnisse angezeigt werden. Es kann sich beispielsweise unterscheiden, wenn Sie Windows oder Linux verwenden .

Eine letzte Sache, die zu beachten ist, ist die Dir [Globstring] -Komfortmethode . Dies ist funktional dasselbe wie Dir.glob (Globstring) und auch semantisch korrekt (Sie indizieren ein Verzeichnis, ähnlich wie ein Array). Aus diesem Grund sehen Sie Dir [] möglicherweise häufiger als Dir.glob , aber sie sind dasselbe.

 

Beispiele für Platzhalter

Das folgende Beispielprogramm zeigt so viele Muster wie möglich in vielen verschiedenen Kombinationen.


 #! / usr / bin / env ruby

 


 

 # Holen Sie sich alle XML-Dateien

 

 Dir ['*. Xml']

 


 

 # Holen Sie sich alle Dateien mit 5 Zeichen und einer .jpg-Erweiterung

 

 Dir ['?????. Jpg']

 


 

 # Holen Sie sich alle JPG-, PNG- und GIF-Bilder

 

 Dir ['*. {Jpg, png, gif}']

 


 

 # Steigen Sie in den Verzeichnisbaum ab und erhalten Sie alle JPG-Bilder

 

 # Hinweis: Dadurch werden auch JPG-Bilder im aktuellen Verzeichnis abgelegt

 

 Dir ['** / *. Jpg']

 


 

 # Steigen Sie ab Uni in alle Verzeichnisse ab und finden Sie alle

 

 # JPG-Bilder.

 

 # Hinweis: Dies führt nur zu einem Verzeichnis

 

 Dir ['Uni ** / *. Jpg']

 


 

 # Steigen Sie in alle Verzeichnisse ab, beginnend mit Uni und allen

 

 # Unterverzeichnisse von Verzeichnissen, die mit Uni beginnen und suchen

 

 # alle .jpg Bilder

 

 Dir ['Uni ** / ** / *. Jpg']

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.