Ruby'de Dize Değiştirme Nasıl Kullanılır

click fraud protection

Bir dizeyi bölme dize verilerini işlemenin yalnızca bir yoludur. Ayrıca bir dizenin bir kısmını başka bir dizeyle değiştirmek için değişiklik yapabilirsiniz. Örneğin, bir örnek dizgide (foo, bar, baz) "foo" yerine "boo" yerine "boo, bar, baz" verilir. Bunu ve daha pek çok şeyi alt ve gsub yöntemi.

Ruby Değiştirme için Birçok Seçenek

İkame yöntemleri iki çeşittir. alt yöntem ikisinin en temelidir ve en az sürprizle birlikte gelir. Belirlenen desenin ilk örneğini yerine geçer.

Buna karşılık alt sadece ilk örneği değiştirir, gsub yöntemi, desenin her örneğini yerine geçer. Ayrıca, her ikisi de alt ve gsub Sahip olmak alt! ve gsub! muadilleri. Unutmayın, yöntemler Yakut ünlem işaretindeki son, değiştirilmiş bir kopyayı döndürmek yerine değişkeni yerinde değiştirir.

Ara ve Değiştir

İkame yöntemlerinin en temel kullanımı, bir statik arama dizesini bir statik değiştirme dizesiyle değiştirmektir. Yukarıdaki örnekte, "foo" yerine "boo" yazılmıştır. Bu, dize içinde "foo" ifadesinin ilk oluşumu için alt yöntemini kullanarak veya "foo" gsub yöntem.

instagram viewer
#! / usr / bin / env yakut
a = "foo, bar, baz"
b = a.sub ("foo", "boo")
b koyar
$ ./1.rb
foo, bar, baz
gsub $ ./1.rb
boo, bar, baz

Esnek Arama

Statik dizeleri aramak ancak o kadar ileri gidebilir. Sonunda, bir alt kümenin Teller veya isteğe bağlı bileşenlere sahip dizelerin eşleştirilmesi gerekir. İkame yöntemleri, elbette, statik dizeler yerine normal ifadelerle eşleşebilir. Bu, çok daha esnek olmalarını ve hayal edebileceğiniz herhangi bir metni eşleştirmelerini sağlar.

Bu örnek biraz daha gerçek bir dünya. Virgülle ayrılmış değerler kümesi düşünün. Bu değerler üzerinde kontrolünüz olmayan bir tablolama programına beslenir (kapalı kaynak). Bu değerleri üreten program kapalı kaynaktır, ancak bazı kötü biçimlendirilmiş veriler çıkarır. Bazı alanların virgülden sonra boşlukları vardır ve bu tabulator programının bozulmasına neden olur.

Olası bir çözüm, iki program arasında "tutkal" veya filtre görevi görecek bir Ruby programı yazmaktır. Bu Ruby programı veri biçimlendirmesindeki sorunları giderir, böylece tabülatör işini yapabilir. Bunu yapmak için, oldukça basit: bir virgül ve ardından bir dizi boşluğu virgül ile değiştirin.

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

Esnek Değiştirmeler

Şimdi bu durumu hayal edin. Küçük biçimlendirmeye ek olarak hatalar, verileri üreten program bilimsel gösterimde sayı verileri üretir. Tabulator programı bunu anlamıyor, bu yüzden değiştirmek zorunda kalacaksınız. Açıkçası, basit bir gsub burada yapmayacaktır çünkü değiştirme her yapıldığında değiştirme farklı olacaktır.

Neyse ki, oyuncu değiştirme yöntemleri oyuncu değiştirme argümanları için bir blok alabilir. Arama dizesi her bulunduğunda, arama dizesiyle eşleşen metin (veya normal ifade) bu bloğa geçirilir. Blok tarafından verilen değer, ikame dizesi olarak kullanılır. Bu örnekte, bilimsel gösterim biçiminde bir kayan nokta sayısı (ör. 1.232e4) ondalık basamaklı normal bir sayıya dönüştürülür. Dize ile bir sayıya dönüştürülür to_f, ardından sayı bir biçim dizesi kullanılarak biçimlendirilir.

#! / usr / bin / env yakut
STDIN.each do | l |
l.gsub! (/-?\d+\.\d+e-?\d+/) yapmak | n |
"% .3f"% n.to_f
son
l.gsub! (/, + /, ",")
koyar l
son
gsub $ kedi floatdata.txt
2.215e-1, 54, 11
3.15668e6, 21, 7
gsub $ kedi floatdata.txt | ./3.rb
0.222,54,11
3156680.000,21,7

Normal İfadeleri Tanımadınız mı?

Bir adım geriye gidip şuna bakalım Düzenli ifade. Şifreli ve karmaşık görünüyor, ama çok basit. Düzenli ifadelere aşina değilseniz, oldukça şifreli olabilirler. Ancak, bunları öğrendikten sonra, metni açıklamak için basit ve doğal yöntemlerdir. Bir dizi element vardır ve elementlerin çoğunun nicelleştiricileri vardır.

Buradaki birincil öğe \ d karakter sınıfı. Bu herhangi bir rakamla eşleşir, 0 ile 9 arasındaki karakterler. Nicelik belirteci +, bu basamaklardan bir veya daha fazlasının art arda eşleşmesi gerektiğini belirtmek için basamak karakteri sınıfıyla birlikte kullanılır. İki basamaklı bir "."ve diğeri harfle ayrılmış"e"(üs için).

Etrafta yüzen ikinci öğe eksi karakteridir.?"nicelik belirteci. Bu, bu öğelerin "sıfır veya biri" anlamına gelir. Kısacası, sayının veya üsün başında negatif işaretler olabilir veya olmayabilir.

Diğer iki unsur. (nokta) karakteri ve e karakter. Tüm bunları birleştirdiğinizde, sayıları bilimsel formda (ör. 12.34e56).

instagram story viewer