Ruby - ciągi
Obiekt String w Ruby przechowuje i manipuluje dowolną sekwencją jednego lub więcej bajtów, zazwyczaj reprezentujących znaki reprezentujące ludzki język.
Najprostsze literały łańcuchowe są ujęte w pojedyncze cudzysłowy (znak apostrofu). Tekst w cudzysłowie to wartość łańcucha -
'This is a simple Ruby string literal'
Jeśli chcesz umieścić apostrof w pojedynczym cudzysłowie literału ciągu, poprzedź go ukośnikiem odwrotnym, aby interpreter języka Ruby nie pomyślał, że kończy ciąg -
'Won\'t you read O\'Reilly\'s book?'
Ukośnik odwrotny działa również w celu uniknięcia innego ukośnika odwrotnego, dzięki czemu drugi ukośnik odwrotny nie jest sam w sobie interpretowany jako znak zmiany znaczenia.
Poniżej przedstawiono funkcje Rubiego związane ze strunami.
Podstawienie wyrażenia
Podstawianie wyrażeń to sposób na osadzenie wartości dowolnego wyrażenia Rubiego w ciągu znaków przy użyciu # {i} -
#!/usr/bin/ruby
x, y, z = 12, 36, 72
puts "The value of x is #{ x }."
puts "The sum of x and y is #{ x + y }."
puts "The average was #{ (x + y + z)/3 }."
To da następujący wynik -
The value of x is 12.
The sum of x and y is 48.
The average was 40.
Ogólne ograniczone ciągi
W przypadku ciągów rozdzielanych ogólnie, można tworzyć ciągi wewnątrz pary pasujących przez dowolne znaki separatora, np.!, (, {, <Itp., Poprzedzone znakiem procentu (%). Q, q i x mają specjalne znaczenie . Łańcuchy rozdzielane ogólnie mogą być -
%{Ruby is fun.} equivalent to "Ruby is fun."
%Q{ Ruby is fun. } equivalent to " Ruby is fun. "
%q[Ruby is fun.] equivalent to a single-quoted string
%x!ls! equivalent to back tick command output `ls`
Znaki ucieczki
NOTE- W łańcuchu umieszczonym w cudzysłowie interpretowany jest znak zmiany znaczenia; w ciągu z pojedynczym cudzysłowem zachowywany jest znak zmiany znaczenia.
Notacja z ukośnikiem odwrotnym | Znak szesnastkowy | Opis |
---|---|---|
\za | 0x07 | Dzwonek lub alert |
\b | 0x08 | Backspace |
\ cx | Control + x | |
\ Cx | Control + x | |
\mi | 0x1b | Ucieczka |
\fa | 0x0c | Formfeed |
\ M- \ Cx | Meta-Control-x | |
\ n | 0x0a | Nowa linia |
\ nnn | Notacja ósemkowa, gdzie n mieści się w zakresie 0,7 | |
\ r | 0x0d | Powrót karetki |
\ s | 0x20 | Przestrzeń |
\ t | 0x09 | Patka |
\ v | 0x0b | Zakładka pionowa |
\ x | Postać x | |
\ xnn | Zapis szesnastkowy, gdzie n mieści się w zakresie 0,9, af lub AF |
Kodowanie znaków
Domyślnym zestawem znaków dla Rubiego jest ASCII, którego znaki mogą być reprezentowane przez pojedyncze bajty. Jeśli używasz UTF-8 lub innego nowoczesnego zestawu znaków, znaki mogą być reprezentowane w jednym do czterech bajtów.
Możesz zmienić swój zestaw znaków używając $ KCODE na początku swojego programu, na przykład:
$KCODE = 'u'
Sr.No. | Kod i opis |
---|---|
1 | a ASCII (tak samo jak brak). To jest ustawienie domyślne. |
2 | e EUC. |
3 | n Brak (tak samo jak ASCII). |
4 | u UTF-8. |
Metody wbudowane w łańcuchy
Musimy mieć instancję obiektu String, aby wywołać metodę String. Poniżej przedstawiono sposób tworzenia instancji obiektu String -
new [String.new(str = "")]
To zwróci nowy obiekt typu string zawierający kopię str . Teraz, używając obiektu str , wszyscy możemy użyć dowolnej dostępnej metody instancji. Na przykład -
#!/usr/bin/ruby
myStr = String.new("THIS IS TEST")
foo = myStr.downcase
puts "#{foo}"
To da następujący wynik -
this is test
Sr.No. | Metody i opis |
---|---|
1 | str % arg Formatuje ciąg przy użyciu specyfikacji formatu. arg musi być tablicą, jeśli zawiera więcej niż jedno podstawienie. Aby uzyskać informacje na temat specyfikacji formatu, zobacz sprintf w sekcji „Moduł jądra”. |
2 | str * integer Zwraca nowy ciąg zawierający liczbę całkowitą razy str. Innymi słowy, str jest powtórzoną liczbą całkowitą imów. |
3 | str + other_str Łączy other_str z str. |
4 | str << obj Łączy obiekt z str. Jeśli obiekt jest Fixnum w zakresie 0,255, jest konwertowany na znak. Porównaj to z concat. |
5 | str <=> other_str Porównuje str z other_str, zwracając -1 (mniejsze niż), 0 (równe) lub 1 (większe niż). W porównaniu rozróżniana jest wielkość liter. |
6 | str == obj Testuje str i obj pod kątem równości. Jeśli obj nie jest napisem, zwraca false; zwraca prawdę, jeśli str <=> obj zwraca 0. |
7 | str =~ obj Dopasowuje ciąg do wzorca wyrażenia regularnego obj. Zwraca pozycję, w której rozpoczyna się dopasowanie; w przeciwnym razie fałsz. |
8 | str.capitalize Zamienia ciąg na wielką literę. |
9 | str.capitalize! To samo, co wielkie litery, ale zmiany są wprowadzane. |
10 | str.casecmp Porównuje ciągi bez rozróżniania wielkości liter. |
11 | str.center Centruje ciąg. |
12 | str.chomp Usuwa separator rekordów ($ /), zwykle \ n, z końca łańcucha. Jeśli nie istnieje separator rekordów, nic nie robi. |
13 | str.chomp! To samo co chomp, ale zmiany są wprowadzane na miejscu. |
14 | str.chop Usuwa ostatni znak w str. |
15 | str.chop! To samo, co chop, ale zmiany są wprowadzane na miejscu. |
16 | str.concat(other_str) Łączy other_str z str. |
17 | str.count(str, ...) Liczy jeden lub więcej zestawów znaków. Jeśli istnieje więcej niż jeden zestaw znaków, zlicza przecięcia tych zestawów |
18 | str.crypt(other_str) Stosuje jednokierunkowy skrót kryptograficzny do str. Argumentem jest łańcuch soli, który powinien mieć długość dwóch znaków, każdy znak z zakresu az, AZ, 0,9,. lub /. |
19 | str.delete(other_str, ...) Zwraca kopię str z usuniętymi wszystkimi znakami z przecięcia argumentów. |
20 | str.delete!(other_str, ...) To samo co usuwanie, ale zmiany są wprowadzane w miejscu. |
21 | str.downcase Zwraca kopię str z wszystkimi dużymi literami zamienionymi na małe. |
22 | str.downcase! To samo co downcase, ale zmiany są wprowadzane na miejscu. |
23 | str.dump Zwraca wersję str ze wszystkimi niedrukowalnymi znakami zastąpionymi notacją \ nnn i wszystkimi znakami specjalnymi ze znakami ucieczki. |
24 | str.each(separator = $/) { |substr| block } Dzieli ciąg, używając argumentu jako separatora rekordów (domyślnie $ /), przekazując każdy podciąg do podanego bloku. |
25 | str.each_byte { |fixnum| block } Przekazuje każdy bajt z str do bloku, zwracając każdy bajt jako dziesiętną reprezentację bajtu. |
26 | str.each_line(separator=$/) { |substr| block } Dzieli ciąg, używając argumentu jako separatora rekordów (domyślnie $ /), przekazując każdy podciąg do podanego bloku. |
27 | str.empty? Zwraca prawdę, jeśli str jest pusty (ma zerową długość). |
28 | str.eql?(other) Dwa ciągi są równe, jeśli mają taką samą długość i zawartość. |
29 | str.gsub(pattern, replacement) [or] str.gsub(pattern) { |match| block } Zwraca kopię str ze wszystkimi wystąpieniami wzorca zastąpionymi przez zamianę lub wartość bloku. Wzorzec będzie zwykle wyrażeniem Regexp; jeśli jest to ciąg znaków, żadne metaznaki wyrażenia regularnego nie będą interpretowane (to znaczy / \ d / dopasuje cyfrę, ale „\ d” będzie pasowało do ukośnika odwrotnego, po którym nastąpi „d”) |
30 | str[fixnum] [or] str[fixnum,fixnum] [or] str[range] [or] str[regexp] [or] str[regexp, fixnum] [or] str[other_str] References str, używając następujących argumentów: one Fixnum, zwraca kod znaku o fixnum; dwie Fixnum, zwraca podciąg zaczynający się od przesunięcia (pierwsza stała nr) do długości (druga stała nr); zakres, zwraca podciąg z zakresu; regexp zwraca część dopasowanego ciągu; regexp z fixnum, zwraca dopasowane dane o fixnum; other_str zwraca podciąg pasujący do other_str. Ujemna wartość Fixnum zaczyna się na końcu łańcucha od -1. |
31 | str[fixnum] = fixnum [or] str[fixnum] = new_str [or] str[fixnum, fixnum] = new_str [or] str[range] = aString [or] str[regexp] = new_str [or] str[regexp, fixnum] = new_str [or] str[other_str] = new_str ] Zastąp (przypisz) całość lub część ciągu. Synonim plasterek !. |
32 | str.gsub!(pattern, replacement) [or] str.gsub!(pattern) { |match|block } Wykonuje podstawienia String # gsub na miejscu, zwracając str lub nil, jeśli nie wykonano żadnych podstawień. |
33 | str.hash Zwraca skrót na podstawie długości i zawartości ciągu. |
34 | str.hex Traktuje początkowe znaki ze str jako ciąg cyfr szesnastkowych (z opcjonalnym znakiem i opcjonalnym 0x) i zwraca odpowiednią liczbę. W przypadku błędu zwracane jest zero. |
35 | str.include? other_str [or] str.include? fixnum Zwraca wartość true, jeśli str zawiera podany ciąg lub znak. |
36 | str.index(substring [, offset]) [or] str.index(fixnum [, offset]) [or] str.index(regexp [, offset]) Zwraca indeks pierwszego wystąpienia podanego podciągu, znaku (fixnum) lub wzorca (regexp) w str. Zwraca nil, jeśli nie zostanie znaleziony. Jeśli występuje drugi parametr, określa on pozycję w ciągu, aby rozpocząć wyszukiwanie. |
37 | str.insert(index, other_str) Wstawia parametr other_str przed znakiem o podanym indeksie, modyfikując str. Indeksy ujemne liczą się od końca łańcucha i wstawiają po zadanym znaku. Celem jest wstawienie ciągu tak, aby zaczynał się od podanego indeksu. |
38 | str.inspect Zwraca wersję str do druku ze znakami specjalnymi. |
39 | str.intern [or] str.to_sym Zwraca Symbol odpowiadający str, tworząc symbol, jeśli wcześniej nie istniał. |
40 | str.length Zwraca długość str. Porównaj rozmiar. |
41 | str.ljust(integer, padstr = ' ') Jeśli liczba całkowita jest większa niż długość słowa, zwraca nowy ciąg o długości całkowitej z ciągiem wyrównanym do lewej i uzupełnionym dopełnieniem; w przeciwnym razie zwraca str. |
42 | str.lstrip Zwraca kopię str bez wiodących białych znaków. |
43 | str.lstrip! Usuwa początkowe białe znaki ze str, zwracając nil, jeśli nie wprowadzono żadnej zmiany. |
44 | str.match(pattern) Konwertuje wzorzec na Regexp (jeśli jeszcze nim nie jest), a następnie wywołuje jego metodę dopasowania na str. |
45 | str.oct Traktuje początkowe znaki str jako ciąg cyfr ósemkowych (z opcjonalnym znakiem) i zwraca odpowiednią liczbę. Zwraca 0, jeśli konwersja nie powiedzie się. |
46 | str.replace(other_str) Zastępuje zawartość i skażenie str z odpowiednimi wartościami w other_str. |
47 | str.reverse Zwraca nowy ciąg ze znakami ze str w odwrotnej kolejności. |
48 | str.reverse! Odwraca str na miejscu. |
49 | str.rindex(substring [, fixnum]) [or] str.rindex(fixnum [, fixnum]) [or] str.rindex(regexp [, fixnum]) Zwraca indeks ostatniego wystąpienia podanego podciągu, znaku (fixnum) lub wzorca (regexp) w str. Zwraca nil, jeśli nie zostanie znaleziony. Jeśli występuje drugi parametr, określa on pozycję w ciągu, aby zakończyć wyszukiwanie. Znaki poza tym punktem nie będą brane pod uwagę. |
50. | str.rjust(integer, padstr = ' ') Jeśli liczba całkowita jest większa niż długość słowa, zwraca nowy ciąg o długości całkowitej z ciągiem wyrównanym do prawej strony i uzupełnionym dopełnieniem; w przeciwnym razie zwraca str. |
51 | str.rstrip Zwraca kopię str z usuniętymi końcowymi spacjami. |
52 | str.rstrip! Usuwa końcowe białe znaki ze str, zwracając nil, jeśli nie wprowadzono żadnej zmiany. |
53 | str.scan(pattern) [or] str.scan(pattern) { |match, ...| block } Obie formy wykonują iterację przez str, dopasowując wzorzec (którym może być wyrażenie Regexp lub String). Dla każdego dopasowania generowany jest wynik i dodawany do tablicy wyników lub przekazywany do bloku. Jeśli wzorzec nie zawiera grup, każdy wynik składa się z dopasowanego ciągu znaków $ &. Jeśli wzorzec zawiera grupy, każdy wynik jest sam w sobie tablicą zawierającą jeden wpis na grupę. |
54 | str.slice(fixnum) [or] str.slice(fixnum, fixnum) [or] str.slice(range) [or] str.slice(regexp) [or] str.slice(regexp, fixnum) [or] str.slice(other_str) See str[fixnum], etc. str.slice!(fixnum) [or] str.slice!(fixnum, fixnum) [or] str.slice!(range) [or] str.slice!(regexp) [or] str.slice!(other_str) Usuwa określoną część z str i zwraca usuniętą część. Formularze, które przyjmują Fixnum, spowodują zgłoszenie błędu IndexError, jeśli wartość jest poza zakresem; formularz Range zgłosi RangeError, a formularze Regexp i String dyskretnie zignorują przypisanie. |
55 | str.split(pattern = $, [limit]) Dzieli ciąg na podciągi na podstawie separatora, zwracając tablicę tych podciągów. Jeśli wzorzec jest ciągiem, jego zawartość jest używana jako separator podczas dzielenia ciągu. Jeśli wzorzec jest pojedynczą spacją, str jest dzielony na białe znaki, z ignorowanymi początkowymi białymi znakami i ciągami ciągłych białych znaków. Jeśli wzorzec jest wyrażeniem regularnym, str jest dzielony w miejscu dopasowania wzorca. Zawsze, gdy wzorzec pasuje do łańcucha o zerowej długości, str jest dzielony na pojedyncze znaki. Jeśli pominięto wzorzec , wartość $; jest używany. Jeśli $; jest nil (co jest wartością domyślną), str jest dzielony na białe znaki, tak jakby podano ``. Jeśli parametr limit zostanie pominięty, końcowe pola o wartości null są pomijane. Jeśli limit jest liczbą dodatnią, zostanie zwrócona najwyżej ta liczba pól (jeśli limit wynosi 1, cały ciąg jest zwracany jako jedyna pozycja w tablicy). Jeśli jest ujemna, nie ma ograniczenia liczby zwracanych pól, a końcowe pola o wartości null nie są pomijane. |
56 | str.squeeze([other_str]*) Tworzy zestaw znaków z parametrów other_str przy użyciu procedury opisanej dla String # count. Zwraca nowy ciąg, w którym ciągi tego samego znaku, które występują w tym zestawie, są zastępowane pojedynczym znakiem. Jeśli nie podano argumentów, wszystkie ciągi identycznych znaków są zastępowane pojedynczym znakiem. |
57 | str.squeeze!([other_str]*) Ściska str w miejscu, zwracając str lub nil, jeśli nie wprowadzono żadnych zmian. |
58 | str.strip Zwraca kopię str z usuniętymi początkowymi i końcowymi białymi znakami. |
59 | str.strip! Usuwa wiodące i końcowe spacje z str. Zwraca nil, jeśli str nie został zmieniony. |
60 | str.sub(pattern, replacement) [or] str.sub(pattern) { |match| block } Zwraca kopię str z pierwszym wystąpieniem wzorca zastąpionym przez zamianę lub wartość bloku. Wzorzec będzie zwykle wyrażeniem Regexp; jeśli jest to łańcuch, to żadne metaznaki wyrażenia regularnego nie będą interpretowane. |
61 | str.sub!(pattern, replacement) [or] str.sub!(pattern) { |match| block } Wykonuje podstawienia String # sub na miejscu, zwracając str lub nil, jeśli żadne podstawienia nie zostały wykonane. |
62 | str.succ [or] str.next Zwraca następcę do str. |
63 | str.succ! [or] str.next! Odpowiednik String # succ, ale modyfikuje odbiornik w miejscu. |
64 | str.sum(n = 16) Zwraca podstawową n-bitową sumę kontrolną znaków w str, gdzie n jest opcjonalnym parametrem Fixnum, domyślnie 16. Wynik jest po prostu sumą wartości binarnych każdego znaku w str modulo 2n - 1. To nie jest szczególnie dobra suma kontrolna. |
65 | str.swapcase Zwraca kopię str z dużymi literami alfabetu zamienionymi na małe i małe litery zamienionymi na wielkie litery. |
66 | str.swapcase! Odpowiednik String # swapcase, ale modyfikuje odbiornik w miejscu, zwracając str lub nil, jeśli nie wprowadzono żadnych zmian. |
67 | str.to_f > Zwraca wynik interpretacji wiodących znaków w str jako liczby zmiennoprzecinkowej. Obce znaki poza końcem prawidłowej liczby są ignorowane. Jeśli nie ma prawidłowej liczby na początku str, zwracane jest 0,0. Ta metoda nigdy nie zgłasza wyjątku. |
68 | str.to_i(base = 10) Zwraca wynik interpretacji wiodących znaków w str jako liczby całkowitej (podstawa 2, 8, 10 lub 16). Obce znaki poza końcem prawidłowej liczby są ignorowane. Jeśli na początku ciągu nie ma poprawnej liczby, zwracane jest 0. Ta metoda nigdy nie zgłasza wyjątku. |
69 | str.to_s [or] str.to_str Zwraca odbiornik. |
70 | str.tr(from_str, to_str) Zwraca kopię str ze znakami z from_str zastąpionymi odpowiednimi znakami z to_str. Jeśli to_str jest krótsze niż from_str, jest dopełniane ostatnim znakiem. Oba łańcuchy mogą używać notacji c1.c2 do oznaczania zakresów znaków, a from_str może zaczynać się od ^, co oznacza wszystkie znaki poza wymienionymi. |
71 | str.tr!(from_str, to_str) Tłumaczy str w miejscu, używając tych samych reguł, co String # tr. Zwraca str lub nil, jeśli nie wprowadzono żadnych zmian. |
72 | str.tr_s(from_str, to_str) Przetwarza kopię str zgodnie z opisem w sekcji Ciąg # tr, a następnie usuwa zduplikowane znaki w regionach, na które miało wpływ tłumaczenie. |
73 | str.tr_s!(from_str, to_str) Wykonuje przetwarzanie String # tr_s na str in place, zwracając str lub nil, jeśli nie wprowadzono żadnych zmian. |
74 | str.unpack(format) > Dekoduje ciąg (który może zawierać dane binarne) zgodnie z ciągiem formatu, zwracając tablicę każdej wyodrębnionej wartości. Łańcuch formatu składa się z sekwencji jednoznakowych dyrektyw, podsumowanych w Tabeli 18. Po każdej dyrektywie może następować liczba wskazująca, ile razy należy powtórzyć tę dyrektywę. Gwiazdka (*) zużyje wszystkie pozostałe elementy. Po dyrektywach sSiIlL można umieścić podkreślenie (_), aby użyć natywnego rozmiaru platformy dla określonego typu; w przeciwnym razie używa spójnego rozmiaru niezależnego od platformy. Spacje są ignorowane w ciągu formatu. |
75 | str.upcase Zwraca kopię str z wszystkimi małymi literami zamienionymi na ich duże litery. Operacja jest niewrażliwa na ustawienia regionalne. Dotyczy to tylko znaków od a do z. |
76 | str.upcase! Zmienia zawartość str na wielkie litery, zwracając nil, jeśli nie zostaną wprowadzone żadne zmiany. |
77 | str.upto(other_str) { |s| block } Iteruje przez kolejne wartości, zaczynając od str i kończąc na other_str włącznie, przekazując każdą wartość po kolei do bloku. Do wygenerowania każdej wartości używana jest metoda String # succ. |
Dyrektywy rozpakowywania łańcuchów
Dyrektywa | Zwroty | Opis |
---|---|---|
ZA | Strunowy | Usunięto końcowe wartości null i spacje. |
za | Strunowy | Strunowy. |
b | Strunowy | Wydobywa bity z każdego znaku (najpierw najbardziej znaczący bit). |
b | Strunowy | Wydobywa bity z każdego znaku (najpierw najmniej znaczący bit). |
do | Fixnum | Wyodrębnia znak jako liczbę całkowitą bez znaku. |
do | Fixnum | Wyodrębnia znak jako liczbę całkowitą. |
D, d | Pływak | Traktuje sizeof (double) znaków jako natywne podwójne. |
mi | Pływak | Traktuje sizeof (double) znaki jako podwójne w malejącej kolejności bajtów. |
mi | Pływak | Traktuje znaki sizeof (float) jako liczby zmiennoprzecinkowe w malejącej kolejności bajtów. |
F, f | Pływak | Traktuje znaki sizeof (float) jako natywne zmiennoprzecinkowe. |
sol | Pływak | Traktuje sizeof (double) znaków jako podwójne w sieciowej kolejności bajtów. |
sol | Strunowy | Traktuje znaki sizeof (float) jako liczby zmiennoprzecinkowe w sieciowej kolejności bajtów. |
H. | Strunowy | Wydobywa fragmenty szesnastkowe z każdego znaku (najpierw najbardziej znaczący bit) |
godz | Strunowy | Wydobywa fragmenty szesnastkowe z każdego znaku (najpierw najmniej znaczący bit). |
ja | Liczba całkowita | Traktuje kolejne znaki sizeof (int) (zmodyfikowane przez _) jako natywną liczbę całkowitą bez znaku. |
ja | Liczba całkowita | Traktuje kolejne znaki sizeof (int) (zmodyfikowane przez _) jako natywną liczbę całkowitą ze znakiem. |
L | Liczba całkowita | Traktuje cztery (zmodyfikowane przez _) kolejne znaki jako natywną długą liczbę całkowitą bez znaku. |
l | Liczba całkowita | Traktuje cztery (zmodyfikowane przez _) kolejne znaki jako natywną liczbę całkowitą ze znakiem. |
M | Strunowy | Cytat do druku. |
m | Strunowy | Zakodowane w Base64. |
N | Liczba całkowita | Traktuje cztery znaki jako długość bez znaku w sieciowej kolejności bajtów. |
n | Fixnum | Traktuje dwa znaki jako skróty bez znaku w sieciowej kolejności bajtów. |
P. | Strunowy | Traktuje znaki sizeof (char *) jako wskaźnik i zwraca \ emph {len} znaki z podanej lokalizacji. |
p | Strunowy | Traktuje znaki sizeof (char *) jako wskaźnik do łańcucha zakończonego znakiem null. |
Q | Liczba całkowita | Traktuje osiem znaków jako poczwórne słowo bez znaku (64 bity). |
q | Liczba całkowita | Traktuje osiem znaków jako znak poczwórnego słowa (64 bity). |
S | Fixnum | Traktuje dwa kolejne znaki (różne, jeśli używane są _) jako skróty bez znaku w natywnej kolejności bajtów. |
s | Fixnum | Traktuje dwa kolejne znaki (różne, jeśli używane są _) jako krótkie ze znakiem w natywnej kolejności bajtów. |
U | Liczba całkowita | Znaki UTF-8 jako liczby całkowite bez znaku. |
u | Strunowy | Zakodowane w UU. |
V | Fixnum | Traktuje cztery znaki jako długość bez znaku w kolejności bajtów little-endian. |
v | Fixnum | Traktuje dwa znaki jako bez znaku krótki w kolejności bajtów little-endian. |
w | Liczba całkowita | Liczba całkowita skompresowana do BER. |
X | Pomija jeden znak wstecz. | |
x | Przeskakuje o jeden znak do przodu. | |
Z | Strunowy | Z końcowymi wartościami null usuniętymi do pierwszego null z *. |
@ | Przeskakuje do przesunięcia podanego przez argument długości. |
Przykład
Wypróbuj poniższy przykład, aby rozpakować różne dane.
"abc \0\0abc \0\0".unpack('A6Z6') #=> ["abc", "abc "]
"abc \0\0".unpack('a3a3') #=> ["abc", " \000\000"]
"abc \0abc \0".unpack('Z*Z*') #=> ["abc ", "abc "]
"aa".unpack('b8B8') #=> ["10000110", "01100001"]
"aaa".unpack('h2H2c') #=> ["16", "61", 97]
"\xfe\xff\xfe\xff".unpack('sS') #=> [-2, 65534]
"now = 20is".unpack('M*') #=> ["now is"]
"whole".unpack('xax2aX2aX1aX2a') #=> ["h", "e", "l", "l", "o"]