"Globbing"bestanden (met Dir.glob) in Ruby kunt u alleen de gewenste bestanden selecteren, zoals alle XML-bestanden, in een bepaalde map. Ondanks dat Dir.blog is Leuk vinden reguliere uitdrukkingen is het niet. Het is erg beperkt in vergelijking met Robijn's reguliere expressies en is nauwer verwant aan wildcards voor shell-uitbreiding.
Het tegenovergestelde van globbing, itereren over alle bestanden in een directory, kan worden gedaan met de Dir. Voorlichting methode.
Voorbeeld
De volgende glob komt overeen met alle bestanden die eindigen op .rb in de huidige directory. Het gebruikt één jokerteken, de asterisk. De asterisk komt overeen met nul of meer tekens, dus elk bestand dat eindigt op .rb komt overeen met deze glob, inclusief een eenvoudig genoemd bestand .rb, met niets voor de bestandsextensie en de voorgaande periode. De glob-methode retourneert alle bestanden die overeenkomen met de globbing-regels als een array, die kan worden opgeslagen voor later gebruik of herhaald.
#! / usr / bin / env robijn
Dir.glob ('*. Rb'). Elk doen | f |
zet f
einde
Wildcards en meer
Er zijn maar een paar wildcards om te leren:
- * - Match nul of meer karakters. Een glob die uit alleen het sterretje bestaat en geen andere tekens of jokertekens, komt overeen met alle bestanden in de huidige directory. Het sterretje wordt meestal gecombineerd met een bestandsextensie, zo niet meer tekens om de zoekopdracht te verfijnen.
- ** - Match alle mappen recursief. Dit wordt gebruikt om af te dalen in de mappenboom en alle bestanden in submappen van de huidige map te vinden, in plaats van alleen bestanden in de huidige map. Dit jokerteken wordt onderzocht in de onderstaande voorbeeldcode.
- ? - Match een willekeurig personage. Dit is handig om bestanden te vinden waarvan de naam een bepaalde indeling heeft. Zo kunnen 5 tekens en een .xml-extensie worden uitgedrukt als ... xml.
- [a-z] - Match elk karakter in de karakterset. De set kan een lijst met tekens zijn of een bereik gescheiden door het koppelteken. Tekensets volgen dezelfde syntaxis als en gedragen zich op dezelfde manier als tekensets in reguliere expressies.
- {a, b} - Match patroon a of b. Hoewel dit lijkt op een kwantificator voor reguliere expressies, is het dat niet. Bijvoorbeeld, in reguliere expressie, het patroon een {1,2} komt overeen met 1 of 2 'a'-tekens. Bij globbing komt het overeen met de string a1 of a2. Andere patronen kunnen in dit construct worden genest.
Een ding om te overwegen is hoofdlettergevoeligheid. Het is aan het besturingssysteem om te bepalen of TEST.txt en Test. Tekst verwijzen naar hetzelfde bestand. Op Linux en andere systemen zijn dit verschillende bestanden. In Windows verwijzen deze naar hetzelfde bestand.
Het besturingssysteem is ook verantwoordelijk voor de volgorde waarin de resultaten worden weergegeven. Het kan verschillen als je Windows gebruikt of Linux, bijvoorbeeld.
Een laatste ding om op te merken is de Dir [globstring] gemak methode. Dit is functioneel hetzelfde als Dir.glob (globstring) en is ook semantisch correct (u indexeert een directory, net als een array). Om deze reden ziet u misschien Dir [] vaker dan Dir.glob, maar ze zijn hetzelfde.
Voorbeelden met jokertekens
Het volgende voorbeeldprogramma laat zoveel mogelijk patronen zien in veel verschillende combinaties.
#! / usr / bin / env robijn
# Haal alle .xml-bestanden op
Dir ['*. Xml']
# Krijg alle bestanden met 5 karakters en een .jpg extensie
Dir ['... jpg']
# Haal alle jpg-, png- en gif-afbeeldingen op
Dir ['*. {Jpg, png, gif}']
# Daal af in de mappenboom en verkrijg alle jpg-afbeeldingen
# Opmerking: dit zal ook jpg-afbeeldingen in de huidige map opslaan
Dir ['** / *. Jpg']
# Daal af in alle mappen beginnend met Uni en vind alles
# jpg-afbeeldingen.
# Opmerking: dit daalt slechts één directory naar beneden
Dir ['Uni ** / *. Jpg']
# Daal af in alle mappen beginnend met Uni en zo
# submappen van mappen die beginnen met Uni en zoeken
# alle .jpg-afbeeldingen
Dir ['Uni ** / ** / *. Jpg']