Jak korzystać z podstawiania ciągów w Ruby

Dzielenie sznurka jest tylko jednym ze sposobów manipulowania danymi ciągu. Możesz także dokonać podstawienia, aby zastąpić jedną część ciągu innym ciągiem. Na przykład w przykładowym ciągu (foo, bar, baz) zastąpienie słowa „foo” słowem „boo” w spowoduje „boo, bar, baz”. Możesz to zrobić i wiele więcej za pomocą pod i gsub metoda w klasie string.

Wiele opcji zamiany Ruby

Metody zamiany występują w dwóch odmianach. The pod Metoda jest najbardziej podstawowa z tych dwóch i ma najmniejszą liczbę niespodzianek. Po prostu zastępuje pierwszą instancję wyznaczonego wzorca zamiennikiem.

Natomiast pod zastępuje tylko pierwszą instancję gsub Metoda zastępuje każde wystąpienie wzorca zamiennikiem. Ponadto oba pod i gsub mieć pod! i gsub! odpowiedniki. Pamiętaj, metody w Rubin kończą się wykrzyknikiem zmieniają zmienną w miejscu zamiast zwracać zmodyfikowaną kopię.

Wyszukaj i zamień

Najbardziej podstawowym zastosowaniem metod podstawienia jest zastąpienie jednego statycznego ciągu wyszukiwania jednym statycznym ciągiem zastąpienia. W powyższym przykładzie „foo” zostało zastąpione przez „boo”. Można to zrobić dla pierwszego wystąpienia „foo” w ciągu za pomocą

instagram viewer
pod lub przy wszystkich wystąpieniach „foo” za pomocą gsub metoda.

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

Elastyczne wyszukiwanie

Wyszukiwanie ciągów statycznych może iść tak daleko. W końcu natkniesz się na przypadki, w których podzbiór smyczki lub łańcuchy z opcjonalnymi komponentami będą musiały być dopasowane. Metody podstawiania mogą oczywiście dopasowywać wyrażenia regularne zamiast ciągów statycznych. To pozwala im być bardziej elastycznym i dopasowywać praktycznie dowolny tekst, jaki możesz wymyślić.

Ten przykład to trochę bardziej prawdziwy świat. Wyobraź sobie zestaw wartości oddzielonych przecinkami. Wartości te są wprowadzane do programu tabelarycznego, nad którym nie masz kontroli (zamknięte źródło). Program, który generuje te wartości, jest również źródłem zamkniętym, ale generuje niektóre źle sformatowane dane. Niektóre pola mają spacje po przecinku, co powoduje uszkodzenie programu tabulatora.

Jednym z możliwych rozwiązań jest napisanie programu Ruby, który będzie działał jako „klej” lub filtr między dwoma programami. Ten program Ruby naprawi wszelkie problemy z formatowaniem danych, aby tabulator mógł wykonać swoje zadanie. Aby to zrobić, jest to dość proste: zastąp przecinek, a po nim spację, tylko przecinek.

#! / usr / bin / env ruby
STDIN.each do | l |
l.gsub! (/, + /, ",")
stawia l
koniec
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

Elastyczne zamienniki

Teraz wyobraź sobie tę sytuację. Oprócz drobnego formatowania błędy, program generujący dane generuje dane liczbowe w notacji naukowej. Program tabulator tego nie rozumie, więc musisz go wymienić. Oczywiście prosty gsub nie zrobi tutaj, ponieważ zamiana będzie inna za każdym razem, gdy zostanie wykonana.

Na szczęście metody podstawiania mogą blokować argumenty podstawienia. Za każdym razem, gdy szukany ciąg wyszukiwania zostanie znaleziony, tekst pasujący do szukanego ciągu (lub wyrażenia regularnego) jest przekazywany do tego bloku. Wartość uzyskana przez blok jest używana jako łańcuch podstawienia. W tym przykładzie liczba zmiennoprzecinkowa w formie notacji naukowej (np 1,232e4) jest konwertowany na liczbę normalną z przecinkiem dziesiętnym. Ciąg jest konwertowany na liczbę za pomocą to_f, następnie liczba jest formatowana za pomocą ciągu formatu.

#! / usr / bin / env ruby
STDIN.each do | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) do | n |
„% .3f”% n.to_f
koniec
l.gsub! (/, + /, ",")
stawia l
koniec
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

Nie znasz wyrażeń regularnych?

Cofnijmy się i spójrzmy na to Wyrażenie regularne. Wygląda tajemniczo i skomplikowanie, ale jest bardzo prosty. Jeśli nie znasz wyrażeń regularnych, mogą być dość tajemnicze. Jednak gdy się z nimi zapoznasz, są to proste i naturalne metody opisywania tekstu. Istnieje wiele elementów, a kilka elementów ma kwantyfikatory.

Podstawowym elementem jest tutaj \re klasa postaci. Spowoduje to dopasowanie dowolnej cyfry, znaków od 0 do 9. Kwantyfikator + jest używany z cyfrową klasą znaków, aby wskazać, że jedna lub więcej z tych cyfr powinna być dopasowana w jednym rzędzie. Masz trzy grupy cyfr, dwie oddzielone znakiem „.„a drugi oddzielony literą”mi„(dla wykładnika).

Drugim elementem unoszącym się wokół jest znak minus, który używa „?„kwantyfikator. Oznacza to „zero lub jeden” z tych elementów. Krótko mówiąc, na początku liczby lub wykładnika mogą występować lub nie znaki ujemne.

Dwa pozostałe elementy to. (kropka) znak i mi postać. Połącz to wszystko, a otrzymasz wyrażenie regularne (lub zestaw reguł dopasowywania tekstu), które pasuje do liczb w formie naukowej (np 12,34e56).

instagram story viewer