Hogyan kell használni a húrpótlást a Ruby-ban

Húr felosztása csak a sztringedatok manipulálásának egyik módja. Helyettesítést is végezhet, ha a karakterlánc egyik részét másik karakterlánccal helyettesíti. Például egy példaként szereplő karakterláncban (foo, bar, baz), ha a "foo" helyébe a "boo" be lépne, "boo, bar, baz" lenne. Megteheti ezt és még sok más dolgot a alatti és gsub módszer a karakterlánc osztályban.

Sok lehetőség a Ruby-helyettesítéshez

A helyettesítési módszerek kétféle lehet. Az alatti módszer a legalapvetőbb a kettő közül és a legkevesebb meglepetéssel jár. Ez egyszerűen helyettesíti a kijelölt minta első példányát a helyettesítéssel.

mivel alatti csak az első példányt, a gsub metódus a minta minden példányát pótolja. Ezen kívül mindkettő alatti és gsub van alatti! és gsub! társaik. Ne feledje, a módszerek a Rubin ez egy felkiáltójellel végződik, és a módosított példány visszaadása helyett megváltoztatja a változót.

Keresés és csere

A helyettesítési módszerek legalapvetőbb használata egy statikus keresési karakterlánc cseréje egy statikus csere karakterlánccal. A fenti példában a "foo" helyébe a "boo" lép. Ez megtehető a "foo" első előfordulásakor a karakterláncban a

instagram viewer
alatti módszerrel vagy a "foo" minden előfordulásával, a gsub eljárás.

#! / usr / bin / env rubin
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
felveszi b
$ ./1.rb
foo, bár, baz
gsub $ ./1.rb
boo, bár, baz

Rugalmas keresés

A statikus karakterláncokat csak ilyen messzire lehet keresni. Végül olyan esetekben fog előfordulni, amikor a húrok vagy az opcionális alkotóelemekkel kapcsolatos vonóságokat egyeztetni kell. A helyettesítési módszerek természetesen megfelelhetnek a reguláris kifejezéseknek a statikus karakterláncok helyett. Ez lehetővé teszi számukra, hogy sokkal rugalmasabbak legyenek, és gyakorlatilag megfeleljenek minden olyan szövegnek, amelyről álmodozhat.

Ez a példa egy kicsit valósághűbb. Képzeljen el egy vesszővel elválasztott érték halmazát. Ezeket az értékeket egy olyan táblázatos programba adjuk be, amelyen nincsenek kontrolljai (zárva forrás). Az ezeket az értékeket előállító program szintén zárt forrású, de rosszul formázott adatokat ad ki. Egyes mezőkben van szóköz vessző után, és ez okozza a tabulátor programot.

Az egyik lehetséges megoldás egy olyan Ruby program felírása, amely "ragasztóként" vagy szűrőként működik a két program között. Ez a Ruby program kiküszöböli az adatformázással kapcsolatos problémákat, így a tabulátor elvégezheti a munkáját. Ehhez meglehetősen egyszerű: cserélje ki a vesszőt, majd egy sor szóközt egy vesszőre.

#! / usr / bin / env rubin
STDIN.milyen módon | l |
l.gsub! (/, + /, ",")
helyezi l
vég
gsub $ macska data.txt
10, 20, 30
12.8, 10.4,11
gsub $ macska data.txt | ./2.rb
10,20,30
12.8,10.4,11

Rugalmas csere

Képzelje el ezt a helyzetet. A kisebb formázáson kívül hibák, az adatokat előállító program szám adatokat állít elő tudományos megjelöléssel. A tabulátor program nem érti ezt, ezért ki kell cserélnie. Nyilvánvaló, hogy egy egyszerű gsub itt nem fog megtenni, mert a csere minden egyes alkalommal más lesz.

Szerencsére a helyettesítési módszerek blokkolhatják a helyettesítési érveket. Minden alkalommal, amikor a keresési karakterlánc megtalálható, a keresési karakterláncnak (vagy regexnek) megfelelő szöveget továbbítják ebbe a blokkba. A blokk által nyert értéket használják helyettesítő karakterláncként. Ebben a példában egy lebegőpontos szám a tudományos jelölés formájában (például: 1.232e4) átalakítása normál számgá, decimális ponttal. A karakterláncot átalakítja számmal a to_f, majd a számot formázási karakterlánccal formázza.

#! / usr / bin / env rubin
STDIN.milyen módon | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) do | n |
"% .3f"% n.to_f
vég
l.gsub! (/, + /, ",")
helyezi l
vég
gsub $ macska floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ macska floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Nem ismeri a rendes kifejezéseket?

Tegyünk egy lépést hátra, és nézzük meg ezt reguláris kifejezés. Rejtélyes és bonyolultnak tűnik, de nagyon egyszerű. Ha nem ismeri a reguláris kifejezéseket, ezek nagyon rejtélyesek lehetnek. Miután megismerte őket, egyszerű és természetes módszerek a szöveg leírására. Számos elem létezik, és több elemnek van számszerűsítője is.

Az elsődleges elem itt a \ d karakter osztály. Ez megfelel bármely számjegynek, a 0–9 karaktereknek. A + számszerűsítőt a számjegyű karakterosztályhoz használják annak jelzésére, hogy ezen számjegyek közül egynek vagy többnek egyeztetnie kell. Három számjegycsoport van, kettő elválasztva egy "."és a másik betűvel elválasztva"e"(exponensen).

A körül lebegő második elem a mínusz karakter, amely a "?mértékegység. Ez azt jelenti, hogy ezen elemek "nulla vagy egy". Tehát röviden, lehet, hogy vannak negatív jelek a szám vagy az exponens elején.

A másik két elem a. (időszak) karakter és a e karakter. Mindezt kombinálva kapsz egy reguláris kifejezést (vagy a szöveg illesztésére vonatkozó szabálykészletet), amely megfelel a számoknak tudományos formában (például 12.34e56).