Kuidas kasutada keelpillide asendamist rubiiniga

Nööri tükeldamine on ainult üks viis stringi andmetega manipuleerimiseks. Stringi ühe osa asendamiseks teise stringi abil saate teha ka asendusi. Näiteks näited stringides (foo, bar, baz), kui asendada sõna "foo" sõnaga "boo" sisse, annaks "boo, bar, baz". Seda ja paljusid muid asju saate teha, kasutades sub ja gsub meetod keelpilliklassis.

Paljud võimalused rubiini asendamiseks

Asendusmeetodeid on kahes variandis. sub meetod on neist kahest põhilisem ja sisaldab kõige vähem üllatusi. See asendab määratud mustri esimese astme lihtsalt asendamisega.

Arvestades, et sub asendab ainult esimese astme, gsub meetod asendab kõik mustri eksemplarid asendamisega. Lisaks mõlemad sub ja gsub on sub! ja gsub! kolleegid. Pidage meeles, et meetodid Rubiin see lõpp hüüumärgiga muudab muutuja paika, selle asemel, et tagastada muudetud koopia.

Otsige ja asendage

Asendusmeetodite kõige põhilisem kasutamine on asendada üks staatiline otsimisstring ühe staatilise asendusstringiga. Ülaltoodud näites asendati sõna "foo" sõnaga "boo". Seda saab teha stringi "foo" esmakordsel esinemisel, kasutades

instagram viewer
sub meetodil või kõigi "foo" esinemiste korral, kasutades gsub meetod.

#! / usr / bin / env rubiin
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
paneb b
$ ./1.rb
foo, baar, baz
gsub $ ./1.rb
boo, baar, baz

Paindlik otsing

Staatiliste stringide otsimine võib minna ainult nii kaugele. Lõpuks jõuate juhtumiteni, kus mõni alamhulk keelpillid või valikuliste komponentidega stringid tuleb sobitada. Asendusmeetodid võivad muidugi staatiliste stringide asemel sobitada regulaaravaldisi. See võimaldab neil olla palju paindlikum ja sobitada praktiliselt iga teksti, millest unistada võite.

See näide on pisut reaalsem maailm. Kujutage ette komaga eraldatud väärtuste komplekti. Need väärtused sisestatakse tabulatsiooniprogrammi, mida te ei saa kontrollida (suletud allikas). Neid väärtusi genereeriv programm on ka suletud lähtekoodiga, kuid see väljastab halvasti vormindatud andmeid. Mõnel väljal on koma järel tühikud ja see põhjustab tabulaatori programmi purunemise.

Üks võimalik lahendus on kirjutada kahe programmi vahele Ruby-programm, mis toimiks liimina või filtrina. See Ruby programm lahendab kõik andmete vormindamise probleemid, et tabulaator saaks oma tööd teha. Selleks on üsna lihtne: asendage koma, millele järgneb mitu tühikut, lihtsalt komaga.

#! / usr / bin / env rubiin
STDIN.aga teha | l |
l.gsub! (/, + /, ",")
paneb l
lõpp
gsub $ cat data.txt
10, 20, 30
12.8, 10.4,11
gsub $ kassi andmed.txt | ./2.rb
10,20,30
12.8,10.4,11

Paindlikud asendamised

Kujutage nüüd seda olukorda ette. Lisaks väiksemale vormindamisele vead, loob andmeid genereeriv programm numbrilisi andmeid teaduslikus märkuses. Tabulaatori programm ei saa sellest aru, seega peate selle asendama. Ilmselt ei tee seda lihtne gsub, sest asendamine on iga kord, kui asendamine toimub, erinev.

Õnneks võivad asendamismeetodid asendamise argumentide jaoks blokeerida. Iga kord, kui otsitakse stringi, edastatakse sellesse plokki tekst, mis vastas otsingustringile (või regexile). Asendusstringina kasutatakse ploki saadud väärtust. Selles näites on teaduslikus märkuses ujukoma number (nt 1.232e4) teisendatakse komakohaga tavaliseks numbriks. String teisendatakse numbriks to_f, siis vormindatakse number vormingustringi abil.

#! / usr / bin / env rubiin
STDIN.aga teha | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) teevad | n |
"% .3f"% n.to_f
lõpp
l.gsub! (/, + /, ",")
paneb l
lõpp
gsub $ kass floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ kass floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Kas te pole tavaliste väljenditega tuttav?

Teeme sammu tagasi ja vaatame seda regulaarne väljend. See näeb välja krüptiline ja keeruline, kuid see on väga lihtne. Kui te pole tavaliste väljenditega tuttav, võivad need olla üsna krüptilised. Kuid kui olete nendega tuttavad, on nad teksti kirjeldamiseks arusaadavad ja loomulikud meetodid. Elemente on palju ja mitmetel elementidel on kvantifikaatorid.

Esmane element on siin \ d tegelasklass. See vastab mis tahes numbrile, tähemärgid 0 kuni 9. Kvantifikaatorit + kasutatakse koos numbrimärgiklassiga, mis tähendab, et üks või mitu neist numbritest peaksid olema reas. Teil on kolm numbrigruppi, millest kaks eraldatakse tähisega "."ja teine ​​eraldatakse tähega"e"(eksponendi jaoks).

Teine ümber hõljuv element on miinusmärk, mis kasutab sõna "?"kvantifikaator. See tähendab "null või üks" neist elementidest. Lühidalt, numbri või eksponendi alguses võib olla negatiivseid märke või mitte.

Kaks muud elementi on. (perioodi) märk ja e tegelane. Kombineerige see kõik ja saate regulaarlause (või reeglite komplekti teksti sobitamiseks), mis vastab numbritele teaduslikul kujul (näiteks 12.34e56).

instagram story viewer