Brug af Glob med mapper i Ruby

click fraud protection

"Globbing"filer (med Dir.glob) i Ruby giver dig mulighed for kun at vælge de filer, du ønsker, såsom alle XML-filer, i et givet bibliotek. Selv om Dir.blog er synes godt om regelmæssige udtryk, er det ikke. Det er meget begrænset i forhold til Rubin's regelmæssige udtryk og er mere beslægtet med shell ekspansion jokertegn.

Det modsatte af at kløbe, iterere over alle filerne i et bibliotek, kan gøres med Dir.foreach metode.

Eksempel

Følgende glob matcher alle filer, der slutter på .rb i nuværende bibliotek. Det bruger et enkelt jokertegn, stjerne. Stjernen matcher nul eller flere tegn, så enhver fil, der slutter på .rb vil matche dette glob, inklusive en fil, der kaldes simpelthen .rb, med intet før filtypen og dens foregående periode. Glob-metoden returnerer alle filer, der matcher klodsereglerne som en matrix, som kan gemmes til senere brug eller itereres over.

 #! / usr / bin / env ruby


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

 sætter f

 ende

Wildcards og mere

Der er kun få wildcards at lære:

  • * - Match nul eller flere tegn. En klode, der kun består af stjerne og ingen andre tegn eller jokertegn, matcher alle filer i det aktuelle bibliotek. Stjernen kombineres normalt med en filtypenavn, hvis ikke flere tegn for at indsnævre søgningen.
    instagram viewer
  • ** - Match alle biblioteker rekursivt. Dette bruges til at gå ned i katalogtræet og finde alle filer i undermapper i det aktuelle bibliotek i stedet for kun filer i det aktuelle bibliotek. Dette jokertegn udforskes i eksemplekoden nedenfor.
  • ? - Match enhver karakter. Dette er nyttigt til at finde filer, hvis navn er i et bestemt format. For eksempel kan 5 tegn og en .xml-udvidelse udtrykkes som ... xml.
  • [A-z] - Match ethvert tegn i tegnsættet. Sættet kan enten være en liste med tegn eller et område adskilt med bindestrek-tegnet. Tegnsæt følger den samme syntaks som og opfører sig på samme måde som tegnsæt i almindelige udtryk.
  • {a, b} - Match mønster a eller b. Selvom dette ser ud som en almindelig udtrykkvantificer, er det ikke. F.eks. I regelmæssigt udtryk mønsteret a {1,2} matcher 1 eller 2 'a' tegn. Når man glober, vil den matche strengen a1 eller a2. Andre mønstre kan indlejres inde i denne konstruktion.

En ting at overveje er sagsfølsomhed. Det er op til operativsystemet at afgøre, om test.txt og Prøve. TxT henvises til den samme fil. På Linux og andre systemer er dette forskellige filer. På Windows refererer disse til den samme fil.

Operativsystemet er også ansvarlig for den rækkefølge, hvor resultaterne vises. Det kan afvige, hvis du er i Windows versus Linux, for eksempel.

En sidste ting at bemærke er Dir [globstring] bekvemmelighedsmetode. Dette er funktionelt det samme som Dir.glob (globstring) og er også semantisk korrekt (du indekserer et bibliotek, ligesom en matrix). Af denne grund kan du muligvis se Dir [] oftere end Dir.glob, men de er de samme ting.

Eksempler på brug af jokertegn

Det følgende eksempelprogram demonstrerer så mange mønstre, som det kan i mange forskellige kombinationer.

 #! / usr / bin / env ruby


 # Hent alle .xml-filer

 Dir [ '*. Xml']


 # Hent alle filer med 5 tegn og en .jpg-udvidelse

 Dir [ '... jpg']


 # Hent alle jpg-, png- og gif-billeder

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


 # Gå ned i katalogtræet, og få alle jpg-billeder

 # Bemærk: dette vil også arkivere jpg-billeder i det aktuelle bibliotek

 Dir [ '** / *. Jpg']


 # Fald ned i alle mapper, der starter med Uni, og find alle

 # jpg-billeder.

 # Bemærk: dette falder kun ned et bibliotek

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


 # Fald ned i alle mapper, der starter med Uni og alle

 # undermapper af mapper, der starter med Uni og find

 # alle .jpg-billeder

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

instagram story viewer