Форматирование строк с помощью Ruby - PullRequest
0 голосов
/ 20 мая 2010

Есть текстовый файл, содержащий слова с 1 пробелом между ними. И есть также запись командной строки, которая дает желаемую длину строки (вывода). Выходными данными будут слова, которые соответствуют длине строки (взяты из командной строки).

Также первое слово будет слева от строки, а последнее слово будет справа от нее. Пробелы между каждым словом будут одинаковыми.

Буду признателен за любую помощь, спасибо за ответ.

Ответы [ 2 ]

1 голос
/ 21 мая 2010

Небольшое прикосновение регулярного выражения сработает:

s = "The quick brown fox jumps over the lazy dog"

def limit_length(s, limit)
  s =~ /\A.{0,#{limit}}(?=\Z| )/ && $& || ''
end

p limit_length(s, 2)    # => ""
p limit_length(s, 3)    # => "The"
p limit_length(s, 42)   # => "The quick brown fox jumps over the lazy"
p limit_length(s, 43)   # => "The quick brown fox jumps over the lazy dog"

Регулярное выражение с разбивкой:

\A                From the beginning of the string
.{0,#{limit}}     Match up to *limit* characters
(?=\Z| )          Followed by the end of the string or a blank

Бит Perl-esque в конце возвращает совпадающую строку или, если нет совпадения, пустую строку. Он ломается так:

&&        If true (i.e., if match)
$&        matched string
||        else
''        empty string
1 голос
/ 20 мая 2010
File.open('input.txt').each do |l|
  length_so_far = 0
  puts l.split(' ').select{|w| (length_so_far += w.length) < max_length}.join(' ')
end
...