Читать строку Ruby по одному символу за раз (для переноса слов) - PullRequest
6 голосов
/ 23 декабря 2010

Я знаю, что этот вопрос является фундаментальным. Я могу принять пользовательский ввод для строки и целого числа, используя:

str = gets()
num = gets().to_i

Но я хочу читать из строки (скажем, в моем случае это больше, чем длина строки) символ за символом и подсчитывать количество символов от первого до самого последнего для каждого символа, встречающегося в строке. Я знаю, что это может быть достигнуто через:

str.length

Я хочу посчитать его символьно, поскольку я пытаюсь реализовать перенос слов в Ruby, в котором, скажем, в пределах ширины строки (что будет вводом числа, определенного пользователем), я хотел бы напечатать только слова, которые не переходят на следующую строку, т.е. я не хочу разбивать непрерывное слово на две строки. Такие слова следует перенести на новую строку.

Спасибо за ваше время .. !!

Ответы [ 2 ]

7 голосов
/ 23 декабря 2010

getc будет читать символ одновременно:

char = getc()

Или вы можете циклически проходить символы в строке с помощью each_char:

'abc'.each_char do |char|
  puts char
end  
5 голосов
/ 23 декабря 2010

Возможно, вы захотите проверить камень Text :: Format .Кроме того, в Rails есть word_wrap как часть ActionView, а у Padrino есть аналогичный метод word_wrap , если вы занимаетесь веб-вещанием.

В противном случае это пример линейной переноски из: http://blade.nagaokaut.ac.jp/cgi-bin/scat.rb/ruby/ruby-talk/249306

str = "\
I don't necessarily need code examples -- but if anyone has
ideas for a best approach to specifying a line wrap width
(breaking between words for lines no longer than a specific
column width) for output from a Ruby script, I'd love to
hear about it."

X = 40
puts str.gsub(/\n/," ").scan(/\S.{0,#{X-2}}\S(?=\s|$)|\S+/)


--- output ---
I don't necessarily need code examples
-- but if anyone has ideas for a best
approach to specifying a line wrap width
(breaking between words for lines no
longer than a specific column width) for
output from a Ruby script, I'd love to
hear about it.
...