Padalijant virvelę yra tik vienas būdas manipuliuoti eilutės duomenimis. Be to, galite pakeisti vieną eilutės dalį kita. Pavyzdžiui, eilutės pavyzdyje (foo, bar, baz) pakeitus „foo“ į „boo“ į, būtų „boo, bar, baz“. Galite tai ir dar daugiau padaryti naudodami sub ir gsub metodas styginių klasėje.
Daugybė rubino pakeitimo variantų
Pakaitiniai metodai yra dviejų rūšių. sub metodas yra pats paprasčiausias iš dviejų ir pateikia kuo mažiau netikėtumų. Tai tiesiog pakeičia pirmąjį nurodyto modelio egzempliorių pakeitimu.
Kadangi sub pakeičia tik pirmąją instanciją gsub metodas pakeičia kiekvieną modelio egzempliorių pakeitimu. Be to, abu sub ir gsub turėti sub! ir gsub! kolegos. Atminkite, kad metodai yra Rubinas kad šauktukas baigiasi vietoje kintamojo, užuot grąžinęs modifikuotą kopiją.
Ieškokite ir pakeiskite
Paprasčiausias pakaitalų metodų naudojimas yra pakeisti vieną statinę paieškos eilutę viena statiniu pakeitimo eilute. Aukščiau pateiktame pavyzdyje „foo“ buvo pakeista „boo“. Tai galima padaryti pirmą kartą įvykus „foo“ eilutėje naudojant
sub metodas arba visais atvejais "foo" naudojant gsub metodas.#! / usr / bin / env rubinas
a = "foo, bar, baz"
b = a.sub („foo“, „boo“)
kelia b
USD ./1.rb
foo, baras, baz
„gsub $ ./1.rb“
boo, baras, baz
Lanksti paieška
Statinių stygų ieškoti galima tik tiek. Galų gale susidursite su atvejais, kai stygos ar stygos su pasirenkamais komponentais turės būti suderintos. Pakaitos metodai, žinoma, gali atitikti įprastas išraiškas, o ne statines eilutes. Tai leidžia jiems būti daug lankstesniems ir atitikti praktiškai bet kokį tekstą, apie kurį galite pasvajoti.
Šis pavyzdys yra šiek tiek realesnis pasaulis. Įsivaizduokite kableliais atskirtų verčių rinkinį. Šios vertės įtraukiamos į lentelių sudarymo programą, kurios jūs negalite valdyti (uždaryta šaltinis). Šias reikšmes generuojanti programa taip pat yra uždaras šaltinis, tačiau ji išveda keletą blogai suformatuotų duomenų. Kai kuriuose laukuose po kablelio yra tarpų, todėl lentelių lentelės programa nutrūksta.
Vienas iš galimų sprendimų yra parašyti „Ruby“ programą, kad ji veiktų kaip „klijai“ arba kaip filtras tarp dviejų programų. Ši „Ruby“ programa pašalins visas duomenų formatavimo problemas, kad tabuliatorius galėtų atlikti savo darbą. Tai padaryti yra gana paprasta: pakeiskite kablelį, einantį po kelių tarpų, tiesiog kableliu.
#! / usr / bin / env rubinas
STDIN.kaip padaryti | l |
l.gsub! (/, + /, „,“)
kelia l
galas
gsub $ cat data.txt
10, 20, 30
12.8, 10.4,11
gsub $ cat data.txt | ./2.rb
10,20,30
12.8,10.4,11
Lankstūs pakeitimai
Dabar įsivaizduokite šią situaciją. Be nedidelio formatavimo klaidų, duomenis kaupianti programa gamina skaičių duomenis pagal mokslinę žymėjimą. Tabuliatoriaus programa to nesupranta, todėl turėsite jį pakeisti. Akivaizdu, kad paprastas gsub čia to nepadarys, nes pakeitimas bus skirtingas kiekvieną kartą, kai bus atliekamas pakeitimas.
Laimei, pakeitimo metodai gali užkirsti kelią pakeitimo argumentams. Kiekvieną kartą suradus paieškos eilutę, tekstas, kuris atitiko paieškos eilutę (arba regex), perduodamas į šią bloką. Bloko gauta vertė naudojama kaip pakaitinė eilutė. Šiame pavyzdyje mokslinio žymėjimo pavidalo kintamasis taškas (pvz., 1.232e4) yra konvertuojamas į normalų skaičių su dešimtainiu tašku. Eilutė paverčiama į skaičių su to_f, tada numeris suformatuotas naudojant formato eilutę.
#! / usr / bin / env rubinas
STDIN.kaip padaryti | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) padaryti | n |
„% .3f“% n.to_f
galas
l.gsub! (/, + /, „,“)
kelia l
galas
gsub $ cat floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ cat floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7
Nežinote apie įprastas išraiškas?
Žingsnis atgal ir pažvelkime į tai Įprasta išraiška. Tai atrodo paslaptinga ir sudėtinga, tačiau labai paprasta. Jei nesate susipažinę su reguliariais posakiais, jie gali būti gana paslaptingi. Tačiau kai jau esate su jais susipažinęs, jie yra aiškūs ir natūralūs teksto aprašymo metodai. Yra keletas elementų, ir keli elementai turi kiekybinius rodiklius.
Pagrindinis elementas čia yra \ d charakterio klasė. Tai atitiks bet kurį skaitmenį, simbolius nuo 0 iki 9. Kvantinis rodiklis + naudojamas skaitmenų simbolių klasei reikšti, kad vienas ar keli iš šių skaitmenų turėtų būti suderinti iš eilės. Turite tris skaitmenų grupes, dvi atskirtas „."o kitas atskirtas raide"e“(eksponentui).
Antrasis elementas, plaukiojantis aplink, yra minuso ženklas, kuris naudoja „?"kiekybinis rodiklis. Tai reiškia „nulis arba vienas“ iš šių elementų. Trumpai tariant, skaičiaus ar eksponento pradžioje gali būti neigiamų ženklų arba jų nebūti.
Kiti du elementai yra:. (laikotarpio) pobūdis ir e charakteris. Derinkite visa tai ir gausite reguliarią išraišką (arba teksto atitikimo taisyklių rinkinį), atitinkančią skaičius moksline forma (pvz., 12.34e56).