Мы обсудили основы представления строк (заключенных в одиночные или двойные
кавычки). Поговорили о том, как интерполировать выражения в строку в
Иногда бывает необходимо напечатать длинные строки текста, задав ширину поля.
Приведенный ниже код решает эту задачу, разбивая текст по границам слов и
учитывая символы табуляции (но символы забоя не учитываются, а табуляция не
сохраняется):
str = «-E0F
When in the Course of human events it becomes necessary
for one people to dissolve the political bands which have
Бывает, что имеется строка с символами табуляции, а мы хотели бы преобразовать их в пробелы (или наоборот). Ниже показаны два метода, реализующих эти операции:
class String
def detab(ts=8)
str = self.dup
while (leftmost = str.index("\t")) != nil
space = " "*(ts-(leftmost%ts))
str[leftmost]=space
end
str
end
def entab(ts=8)
str = self.detab
areas = str.length/ts
newstr = ""
for a in 0..areas
temp = str[a*ts..a*ts+ts-l]
if temp.size==ts
Префикс uu в этих именах означает UNIX-to-UNIX. Утилиты uuencode и uudecode -
это проверенный временем способ обмена данными в текстовой форме (аналогичный
base64).
str = "\007\007\002\abdce"
new_string = [str].pack("u") # '(!P<"!V)D8V4''
original = new_string.unpack("u") # ["\a\a\002\abdce"]
Отметим, что метод unpack возвращает массив.
Алгоритм base64 часто применяется для преобразования двоичных данных в текстовую форму, не содержащую специальных символов. Например, в конференци
ях так обмениваются исполняемыми файлами.
Расстояние между строками важно знать в индуктивном обучении (искусственный интеллект), криптографии, исследовании структуры белков и других областях.
Алгоритм MD5 вырабатывает 128-разрядный цифровой отпечаток или дайджест
сообщения произвольной длины. Это разновидность свертки, то есть функция
Контрольный код циклической избыточности (Cyclic Redundancy Checksum,CRC) - хорошо известный способ получить «сигнатуру» файла или произвольного массива байтов. CRC обладает тем свойством, что вероятность получения одинакового кода для разных входных данных равна 1 /2**N, где N- число битов результата (чаще всего 32).
Изредка бывает необходимо получить «следующую» строку. Так, следующей для строки "ааа" будет строка "aab" (затем "aac", "aad" и так далее).
В Ruby для этой цели есть метод succ:
droid = "R2D2"
inproved = droid.succ # "R2D3"
pill = "Vitamin B"
?ill2 = pill.succ # "Vitamin C"
Метод dump позволяет получить графическое представление символов, которь^
обычно не печатаются вовсе пли вызывают побочные эффекты:
# Добавлено три символа ASCII BEL.
# Печатается: Вниманиё\007\007\007
# Печатается: abc\t\tdef\tghi\n\n
si = "Внимание" « 7 « 7 « 7
pats si.dump
s2 = "abc\t\tdef\tghi\n\n"
pets s2.dump
s3 = "Двойная кавычка: \""
