Globin käyttö hakemistojen kanssa Rubyssa

"yleistyksen"tiedostot (kanssa Dir.glob) Ruby-sovelluksessa voit valita haluamasi tiedostot, kuten kaikki XML-tiedostot tietystä hakemistosta. Vaikkakin Dir.blog On Kuten säännölliset lausekkeet, se ei ole. Se on hyvin rajallinen verrattuna Rubiinisäännölliset lausekkeet ja liittyy läheisemmin kuorilaajennuksen yleismerkkeihin.

Vastakohta globbingille, iteroimalla kaikki hakemistossa olevat tiedostot, voidaan tehdä Dir.foreach menetelmä.

esimerkki

Seuraava glo vastaa kaikkia tiedostoja, jotka päättyvät .rb että nykyinen hakemisto. Se käyttää yhtä jokerimerkkiä, tähdellä. Asteriski vastaa nollaa tai enemmän merkkejä, joten kaikki tiedostot päättyvät .rb vastaa tätä glo-kuvaa, mukaan lukien tiedosto nimeltä yksinkertaisesti .rb, ilman mitään tiedostotunnistetta ja sitä edeltävää ajanjaksoa. Glob-menetelmä palauttaa kaikki globaalit säännöt vastaavat tiedostot taulukkona, joka voidaan tallentaa myöhempää käyttöä varten tai toistaa uudelleen.

 #! / usr / bin / env ruby


 Dir.glob ('*. Rb'). Kumpikin tekee | f |

 laittaa f

 pää

instagram viewer

Jokerimerkkejä ja muuta

Oppia on vain muutama yleismerkkejä:

  • * - Vastaa nollaa tai enemmän merkkejä. Ainoastaan ​​tähtiä sisältävä kokonaisuus, joka ei sisällä muita merkkejä tai jokerimerkkejä, vastaa kaikkia nykyisen hakemiston tiedostoja. Tähti yhdistetään yleensä tiedostotunnisteeseen, ellei useampaan merkkiin, kaventaa hakua.
  • ** - Sovita kaikki hakemistot rekursiivisesti. Tätä käytetään laskeutumaan hakemistopuuhun ja etsimään kaikki nykyisen hakemiston alihakemistoissa olevat tiedostot sen sijaan, että vain nykyisen hakemiston tiedostoja. Tätä jokerimerkkiä on tutkittu alla olevassa esimerkissä.
  • ? - Vastaa yhtä merkkiä. Tämä on hyödyllinen etsittäessä tiedostoja, joiden nimi on tietyssä muodossa. Esimerkiksi 5 merkkiä ja .xml-tunniste voidaan ilmaista ... xml.
  • [A-z] - Vastaa mitä tahansa merkistöä merkistössä. Joukko voi olla joko merkkiluettelo tai väliviivamerkillä erotettu alue. Merkkijoukot noudattavat samaa syntaksia kuin ja käyttäytyvät samalla tavalla kuin säännölliset lausekkeet merkistöissä.
  • {a, b} - Sovituskuvio a tai b. Vaikka tämä näyttää säännöllisen lausekkeen kvantifioijalta, niin ei ole. Esimerkiksi säännöllisessä lausekkeessa kuvio a {1,2} vastaa 1 tai 2 'a' merkkiä. Globbing, se vastaa merkkijono A1 tai a2. Muut rakenteet voivat olla sisäkkäin tämän rakenteen sisällä.

Yksi asia harkitsemaan on tapausherkkyys. On käyttöjärjestelmän tehtävä selvittää, onko test.txt ja Testata. TxT viitata samaan tiedostoon. Linuxissa ja muissa järjestelmissä nämä ovat erilaisia ​​tiedostoja. Windowsissa nämä viittaavat samaan tiedostoon.

Käyttöjärjestelmä on myös vastuussa tulosten näyttöjärjestyksestä. Se voi vaihdella, jos käytät Windows-versiota Linux, esimerkiksi.

Viimeinen huomionarvoinen asia on Dir [globstring] mukavuusmenetelmä. Tämä on toiminnallisesti sama kuin Dir.glob (glostring) ja on myös semanttisesti oikea (indeksoit hakemistoa, aivan kuten taulukkoa). Tästä syystä saatat nähdä Dir [] useammin kuin Dir.glob, mutta ne ovat sama asia.

Esimerkkejä jokerimerkkien käytöstä

Seuraava esimerkkiohjelma osoittaa niin monta mallia kuin pystyy monissa eri yhdistelmissä.

 #! / usr / bin / env ruby


 # Hanki kaikki .xml-tiedostot

 Dir [ '*. Xml']


 # Hanki kaikki tiedostot, joissa on 5 merkkiä ja .jpg-tiedostotunniste

 Dir [ '... jpg']


 # Hanki kaikki jpg-, png- ja gif-kuvat

 Rež ['*. {Jpg, png, gif}']


 # Laskeudu hakemistopuun ja saat kaikki JPG-kuvat

 # Huomaa: Tämä tiedosto tallentaa myös JPG-kuvat nykyiseen hakemistoon

 Dir [ '** / *. Jpg']


 # Laskeudu kaikkiin hakemistoihin, jotka alkavat Uni: llä, ja löydä kaikki

 # jpg-kuvia.

 # Huomaa: tämä on vain yksi hakemisto alas

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


 # Laskeudu kaikkiin hakemistoihin, jotka alkavat Uni ja kaikki

 # hakemistojen alihakemistot, jotka alkavat Uni ja find

 # kaikki .jpg-kuvat

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

instagram story viewer