A rubelben a "Split" módszer használata

Mint már tudja, a húr bekerül Rubin melyek az úgynevezett első osztályú tárgyak amelyek számos módszert használnak a lekérdezésekhez és a manipulációkhoz.

Az egyik legalapvetőbb húrkezelés A műveletek egy karakterláncot több alstringre osztják. Ez megtörténhet, ha például van egy hasonló karakterlánccal"foo, bar, baz" és meg akarja venni a három húrokat "foo", "bar" és "baz". Az hasított A String osztály módszerével ezt megteheti Önnek.

A "Split" alapvető használata

A hasított módszer: egy karakterlánc felosztása egyetlen karakter vagy statikus karakter sorozat alapján. Ha a split első argumentuma egy karakterlánc, akkor a karakterláncok karakterlánc-elválasztó elválasztóként kerülnek felhasználásra, míg vesszővel elválasztott adatok esetében a vesszőt használják az adatok elválasztására.

#! / usr / bin / env rubin
str = "foo, bar, baz"
elhelyezi str.split (",")
$ ./1.rb
ize
rúd
baz

Adjon hozzá rugalmasságot normál kifejezésekkel

Könnyebb módszerek vannak a húr. Ha a reguláris kifejezést választóként használjuk, a split módszer sokkal rugalmasabbá válik.

instagram viewer

Ismét vegye például a húrot "foo, bar, baz". Az első vessző után van szóköz, a második után pedig nem. Ha a "," karakterláncot használjuk elválasztóként, akkor a "bár" karakterlánc elején továbbra is szóköz marad. Ha a "," karakterláncot használjuk (szóközzel a vessző után), akkor csak az első vessző felel meg, mivel a második vesszőnél nem lesz szóköz. Nagyon korlátozó.

Ennek a problémának a megoldása az, hogy egy szűk szöveg helyett egy reguláris kifejezést használ a határoló argumentumként. A reguláris kifejezések lehetővé teszik, hogy ne csak a statikus karaktersorozatokat illessze egymáshoz, hanem meghatározhatatlan számú karaktert és opcionális karaktert is megadhasson.

Rendszeres kifejezések írása

A határoló szabályos kifejezésének írásakor az első lépés szavakkal leírni, hogy mi a határoló. Ebben az esetben a "vessző, amelyet egy vagy több szóköz követhet" kifejezés elfogadható.

Ennek a regexnek két eleme van: vessző és az opcionális szóköz. A szóközök a * (csillag vagy csillag) számszerűsítőt fogják használni, ami azt jelenti, hogy "nulla vagy több". Bármely elem, amely ezt megelőzi, nulla vagy annál többször is megegyezik. Például a regex /a*/ megegyezik a nulla vagy annál több „a” karakter sorozattal.

#! / usr / bin / env rubin
str = "foo, bar, baz"
felteszi str.split (/, * /)
$ ./2.rb
ize
rúd
baz

A hasítások számának korlátozása

Képzeljen el egy vesszővel elválasztott karakterláncot, például "10,20,30, ez egy önkényes karakterlánc". Ez a formátum három szám, amelyet egy megjegyzés oszlop követ. Ez a megjegyzés oszlop tetszőleges szöveget tartalmazhat, beleértve vesszővel ellátott szöveget is. Megelőzni hasított az oszlop szövegének felosztásáig beállíthatjuk az oszlopok maximális számát.

Jegyzet: Ez csak akkor működik, ha a tetszőleges szöveggel rendelkező megjegyzés karakterlánc a táblázat utolsó oszlopa.

A hasítások számának korlátozása érdekében a split módszer végrehajtja a mezőben lévő mezők számát második argumentumként a split módszerhez, így:

#! / usr / bin / env rubin
str = "10,20,30, tíz, húsz és harminc"
felteszi str.split (/, * /, 4)
$ ./3.rb
10
20
30
Tíz, húsz és harminc

Bónusz példa!

Mi lenne, ha használni szeretné hasított hogy minden tárgyat megkapja, de a legelsőt?

Valójában nagyon egyszerű:

először * pihenés = ex.split (/, /)

A korlátozások ismerete

A split módszernek meglehetősen nagy korlátai vannak.

Vegyük például a húrot '10, 20, "Bob, Eve és Mallory", 30 '. A szándék két szám, amelyet idézett karakterlánc követ (amely vesszőket is tartalmazhat), majd egy másik szám. A Split nem tudja megfelelően elválasztani ezt a karakterláncot mezőkbe.

Ehhez a húrszkennernek kell lennie stateful, ami azt jelenti, hogy emlékszik, ha egy idézett karakterláncban van, vagy sem. A megosztott lapolvasó nem állapota, tehát nem képes megoldani az ilyen problémákat.