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


Автор: Akeem 31.7.2006, 21:18
При работе с Руби. У меня возник такой вопрос. Можно ли как то выводить большие (довольно массивы). Так чтобы не терялась информация. Если да то как? 

Автор: Pete 31.7.2006, 22:12
А почему она будет теряться?
Вообще, для вывода массивов есть метод p:
Код

irb(main):001:0> a = [ 1, 'a', "abc", -3.57 ]
=> [1, "a", "abc", -3.57]
irb(main):002:0> p a
[1, "a", "abc", -3.57]
=> nil
irb(main):003:0>

Если они настолько большие, что не помещаются в терминал, то можно писать в файл стандартными перенаправлениями потока вывода:
Код

ruby proga.rb > qq.txt

либо
Код

ruby proga.rb >> qq.txt
 

Автор: Akeem 1.8.2006, 09:27
Не в файл не пойдет. Надо именно в терминал. и так чтобы можно было читать удобно массив.

Автор: MastEdm 1.8.2006, 11:47
Ну уж если вас не устраивает предложение Pete, почему бы не написать свой метод?!

Автор: Vanoha 1.8.2006, 16:07
Цитата(Akeem @ 31.7.2006,  21:18)
При работе с Руби. У меня возник такой вопрос. Можно ли как то выводить большие (довольно массивы). Так чтобы не терялась информация. Если да то как?

Например, так (построчно):
Код

array.each{|elem|   p elem}


или для очень большого массива постранично (построчно):
Код

lpp=20 # lines per page
array.each_with_index{|elem, i|
  p elem
  ( puts "== Push Enter for more =="; gets )  if (i%lpp)==(lpp-1)
}


Можешь определить это как метод класса Array (или как тебе удобно) и пользуй.

Если же элементы массива очень большие и не помещаются в строку (например, очень большие целые или строки), то можно попробовать так (идея, оптимизируй сам):
Код

lpp=20 # lines per page
spl=72 # symbols per line
lc=0   # lines counter

array.each{|elem|
  elem=elem.to_s
  (lc=0; puts '== Puts Enter for more =='; gets) if (elem.size/spl+lc+1)>lpp 

  puts elem[0,spl]; lc+=1
  while elem=elem[spl..-1]  do
    puts "==>"+elem[0,spl];     lc+=1  end
}


Автор: Akeem 1.8.2006, 16:23
MastEdm
Потому что не могу придумать как.


Vanoha
Спасибо за совет. Возьмму на вооружение.

Автор: Cr@$h 24.8.2006, 13:52

M
Cr@$h
Vanoha ++ за помощь новичку.

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