Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Ruby: Общие вопросы > По моему что-то с типами данных...


Автор: Angel07 3.4.2010, 00:46
Привет и заранее спасибо!  smile

Вобщем нужно перегнать текст из такого:

00:00:00,000 --> 00:00:01,000
Привет


в такой:

<sentence time="00:00:00,000 --> 00:00:01,000" russian="Привет" translation="{t}Привет{/t}"></sentence>

Делаю примерно так:

Код

$stdout = File.open('sub.txt', 'w')
str = IO.readlines("in.txt")


for i in 0..str.size do
  a = str[i].scan(/(\S{12}+\s-->\s+\S{12})/)
  b = str[i].scan(/(^\D{1,})/)
  puts '<sentence time="' + a + '" russian="' + b + '" translation="{t}' + b + '{/t}"></sentence>'
end


И постоянно вылезает ошибка:

Код

# ~> -:8:in `+': can't convert Array into String (TypeError)
# ~>    from -:8
# ~>    from -:5:in `each'
# ~>    from -:5


Понимаю, что вопрос глупый, но как-то дело не идет smile

Автор: рельсовик 3.4.2010, 11:26
Код

$stdout = File.open('sub.txt', 'w')
str = IO.readlines("in.txt")
i=0
while i < str.size do
  a = str[i].scan(/(\S{12}+\s-->\s+\S{12})/)[0][0]
  b = str[i+1].scan(/(^\D{1,})/)[0][0]
  puts '<sentence time="' + a + '" russian="' + b + '" translation="{t}' + b + '{/t}"></sentence>'
  i+=2
end


Почему a и б возвращаются в двойном массиве а не строке - не вникал, просто увидел и поправил результат. А вот i надо каждый цикл на два увеличивать, используя i для первой строки и i+1 для второй, они ж на разных строках в исходнике-то. =) Переделал цикл в while для простоты - вероятно можно было и оставить for, опять-же не вникал =)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)