Ruby: работа с текстом

 String Class

Индексы

Строка в ruby является объектом класса String.  По индексу строки, по аналогии с индексом массива, можно извлекать, изменять и удалять данные из строки. Причем обращения по индексу идет через те же квадратные скобки, что и для массива.

Обращаясь к строке можно извлечь например первые 6 элементов или последний символ на основе индекса строки, по типу того, как мы извлекаем элементы array:

str[start, lenght]
str[0,6] - извлекаем первые 6 элементов, где 0 - первый символ, 6 - сколько символов от первого
str[7..10] - извлекаем с 7го по 10ый символы используя range
str[-1] - извлекаем последний символ из строки
str[-6,6] - извлекаем с конца строки шесть последний символов
str[-6..-1] - извлекаем с конца строки шесть последний символов используя range

Кроме получения данных по индексу можно эти данные и менять/удалять/добавлять:

str[0,6] = "new_first_6_char" - заменяем первые 6 элементов на новые
str[0,6] = "" - удаляем
str[16,0] = "the end" - добавляем в конец строки данные (16 символ последний)
str[-1,0] = "the end" - добавляем в конец строки данные (более корректный способ)
Методы

Почти все в ruby является объектом. Каждая строка является объектом класса string и к ней могут быть применены методы этого класса.

ПРОСМОТР

.dump – показываем все символы, включая специальные

.count(“e”) – считаем сколько раз встречается буква “e” в строке

.length – количество символов. Может быть использовано для базовых проверок полученных переменных (MAC, кредитка)

irb(main):017:0* "My name is Petr".length

=> 15

Выводим элементы массива, длина которых меньше определенного количества символов.

puts res.select {|x, l| x.length < 10 }
Поиск

.index – поиск начала позиции (индекса первой буквы) по строке в строке.

irb(main):001:0> str = "Fdffdfd lolkf fdsfdsf"
=> "Fdffdfd lolkf fdsfdsf"
irb(main):002:0> str.index("lol") 
=> 8
irb(main):003:0> puts str[8,3]
lol
=> nil

.include? (str) – ищет подпадания указанной строки в указанной переменной строки. В результате выдает true/false.

We can do that using Ruby's .include? method, which evaluates to true if it finds what it's looking for and false otherwise.

(As a general rule, Ruby methods that end with ? evaluate to the boolean values true or false.)
irb(main):027:0* puts str.include?("test")
false
=> nil
irb(main):028:0> puts str.include?("lol") 
true
=> nil
Замещение

.sub(“from”, “to”)  – для замен первого подпадения (substitution) на заданное (аналог sed без g). Для замены в той же переменной нужно использовать sub!

.sub(/!|'/,"") # подменяет первый ! на ничего, остальные остаются

@fw = snmp_get(@OID_FW).sub(/Build /, "")

.gsub(“from”, “to”)  – для замен всех подпадений  (global substitution) на заданное (аналог sed с g). Для замены в той же переменной нужно использовать gsub!

.gsub(/!|'/,"") # подменяет все ! на ничего

feed = args.join(" ").sub(/f |F /,"").gsub(/!|'|"/,"")
Модификация

.capitalize – делает первый символ слова upcase, остальные downcase

.upcase/.downcase – понятно. Может быть использовано для приведения переменных к единому формату для облегчения проверок/стандартизации вывода.

We want to make sure we capture both "S" and "s" in the user's input. We could write separate if / else statements to handle this, but we can also use .downcase! to convert the user's input to all lower case. That way, we only have to search for "s".

.reverse – экранирование текста задом-наперед. Можно использовать в том числе и для экранирования массива.

irb(main):018:0> "My name is Petr".reverse
=> "rteP si eman yM"

colors = {"blue" => 3, "green" => 1, "red" => 2}
colors = colors.sort_by do |color, count|
  count
end
colors.reverse!

>
blue
3
red
2
green
1
Удаление

.chomp – удаление спец. символов с конца строки (напр. \n, \r, \r\n)

\r\n
\r - carriage return, курсор должен быть перемещен в начало строки
\n - newline separator, курсор должен быть перемещен на новую строку

.chomp(“end.”) – удаляем символы “end.” с конца строки

.chop – удаляем последний символ в строке, который не относится к служебному

.strip – офигенный метод класса String. Удаляет whitespace characters с начала и конца строки в ruby. Может например помочь любимый для Windows .txt символ ^M с конца строки (обнаружить просто через cat -v <file>).

.strip will remove all extra whitespace from the front and back, leaving innards alone.

 

Разное

Если выдает UTF-8 regexp with ASCII-8BIT string, то или строку нужно привести в UTF-8 (правильно) или regexp в ASCII.

str.force_encoding("utf-8")

 

Leave a Reply