Kuinka käyttää merkkijonojen korvaamista rubiinissa

click fraud protection

Merkkijonon jakaminen on vain yksi tapa manipuloida merkkijonotietoja. Voit myös korvata korvata merkkijonon yhden osan toisella merkkijonolla. Esimerkiksi, merkkijono (foo, bar, baz) korvaamalla "foo" termillä "boo" in, tuotettaisiin "boo, bar, baz". Voit tehdä tämän ja monia muita asioita käyttämällä sub ja gsub menetelmä merkkijono-luokassa.

Monia vaihtoehtoja Rubyn korvaamiseksi

Substituutiomenetelmiä on kahta tyyppiä. sub Menetelmä on perustana näistä kahdesta ja sisältää vähiten yllätyksiä. Se yksinkertaisesti korvaa osoitetun kuvion ensimmäisen esiintymän korvaamisella.

taas sub korvaa vain ensimmäisen oikeusasteen, gsub menetelmä korvaa kuvion kaikki esiintymät korvaamisella. Lisäksi molemmat sub ja gsub omistaa sub! ja gsub! kollegansa. Muista, menetelmät Rubiini tämä loppu huutomerkillä muuttaa muuttujaa paikallaan sen sijaan, että se palauttaa muokatun kopion.

Etsi ja korvaa

Vaihtoehtoisten menetelmien perusteellisin käyttö on korvata yksi staattinen hakujono yhdellä staattisella korvausjonolla. Yllä olevassa esimerkissä "foo" korvattiin "boo". Tämä voidaan tehdä merkkijonossa "foo" esiintyessä ensimmäistä kertaa

instagram viewer
sub -menetelmällä tai kaikilla "foo" -tapahtumilla käyttämällä gsub menetelmä.

#! / usr / bin / env ruby
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
asettaa b
$ ./1.rb
foo, baari, baz
gsub $ ./1.rb
boo, baari, baz

Joustava haku

Staattisten merkkijonojen etsiminen voi mennä vain niin pitkälle. Lopulta joudut tapauksiin, joissa jouset tai valinnaisilla komponenteilla olevat jouset on sovittava yhteen. Korvausmenetelmät voivat tietysti vastata säännöllisiä lausekkeita staattisten merkkijonojen sijasta. Tämän avulla he voivat olla paljon joustavampia ja sovittaa käytännöllisesti katsoen kaikki tekstit, joista voit haaveilla.

Tämä esimerkki on hiukan todellisempi maailma. Kuvittele joukko pilkuilla erotettuja arvoja. Nämä arvot syötetään taulukko-ohjelmaan, jota et voi hallita (suljettu lähde). Ohjelma, joka tuottaa nämä arvot, on myös suljettu lähde, mutta se tuottaa virheellisesti muotoiltua tietoa. Joissakin kentissä on välilyönti pilkun jälkeen, ja tämä aiheuttaa taulukko-ohjelman rikkoutumisen.

Yksi mahdollinen ratkaisu on kirjoittaa Ruby-ohjelma toimimaan "liimana" tai suodattimena kahden ohjelman väliin. Tämä Ruby-ohjelma korjaa kaikki tietojen muotoilussa esiintyvät ongelmat, jotta tabulaattori voi suorittaa tehtävänsä. Tämän tekeminen on melko yksinkertaista: korvaa pilkku ja useita välilyöntejä vain pilkulla.

#! / usr / bin / env ruby
STDIN.sitä tehdä | l |
l.gsub! (/, + /, ",")
asettaa l
pää
gsub $ kissatiedot.txt
10, 20, 30
12.8, 10.4,11
gsub $ kissan data.txt | ./2.rb
10,20,30
12.8,10.4,11

Joustavat vaihto

Kuvittele nyt tämä tilanne. Pieni muotoilun lisäksi virheitä, dataa tuottava ohjelma tuottaa numerotietoja tieteellisessä merkinnässä. Taulukko-ohjelma ei ymmärrä tätä, joten joudut korvaamaan sen. Ilmeisesti yksinkertainen gsub ei tee täällä, koska korvaaminen on erilainen joka kerta, kun korvaus tehdään.

Onneksi korvaamismenetelmät voivat estää korvausargumentteja. Joka kerta, kun hakujono löytyy, hakujonoon (tai regexiin) vastaava teksti välitetään tähän lohkoon. Korvausjonona käytetään lohkon tuottamaa arvoa. Tässä esimerkissä liukuvan numeron tieteellisessä merkinnässä (kuten 1.232e4) muunnetaan normaalilukuksi desimaalin tarkkuudella. Merkkijono muutetaan numeroksi to_f, sitten numero alustetaan muotojonolla.

#! / usr / bin / env ruby
STDIN.sitä tehdä | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) tekevät | n |
"% .3f"% n.to_f
pää
l.gsub! (/, + /, ",")
asettaa l
pää
gsub $ kissa floatdata.txt
2,215e-1, 54, 11
3.15668e6, 21, 7
gsub $ kissa floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Etkö tunne säännöllisiä lausekkeita?

Otetaanpa askel taaksepäin ja katsotaan sitä tavallinen ilme. Se näyttää salaperäiseltä ja monimutkaiselta, mutta se on hyvin yksinkertainen. Jos et tunne säännöllisiä lausekkeita, ne voivat olla melko salaperäisiä. Kun olet perehtynyt heihin, he ovat kuitenkin suoraviivaisia ​​ja luonnollisia tapoja kuvata tekstiä. Elementtejä on useita, ja useilla elementeillä on kvantifioijat.

Ensisijainen elementti tässä on \ d merkki luokka. Tämä vastaa mitä tahansa numeroa, merkkejä 0–9. Määrällistä tunnistetta + käytetään numeromerkkiluokan kanssa osoittamaan, että yksi tai useampi näistä numeroista tulisi sovittaa peräkkäin. Sinulla on kolme numeroryhmää, kaksi erotettu merkinnällä "."ja toinen erotetaan kirjaimella"e"(eksponentti).

Toinen elementti, joka kelluu on miinusmerkki, joka käyttää "?"kvantifioija. Tämä tarkoittaa "nollaa tai yhtä" näistä elementeistä. Joten lyhyesti sanottuna, numeron tai eksponentin alussa voi olla negatiivisia merkkejä tai ei.

Kaksi muuta elementtiä ovat. (jakson) merkki ja e merkki. Yhdistä tämä kaikki ja saat säännöllisen lausekkeen (tai säännöstöä tekstin sovittamiseksi), joka vastaa numeroita tieteellisessä muodossa (kuten 12.34e56).

instagram story viewer