On Jun 23, 2008, at 10:31 AM, Justin To wrote:

> Hi, I want to output a series of items, but I want to make sure  
> they're
> properly spaced out so it's more readable.
>
> Sample:
>
> dfssdf     |  393f    |  dfskjsdfk
> dfjkdfkdfkj|  fd      |  3493
> df         |  1       |  etc....
>
> Each row is a class and the data is a variable in the class. For
> example, row 1-variable 1 is 'dfssdf', row1-variable 2 is '393f', etc.
>
> All of my row objects are stored in an array, and when I want to  
> output
> them, I iterate through the array to access each object's data. How  
> can
> I make sure that each object's data is output in accordance with every
> other data's data? (i.e. proper spacing)
>
> THANKS!


# compute widths expensively

widths = []

rows.each do |row|
   row.each_with_index do |cell, idx|
     widths[idx] = [cell.to_s.size, widths[idx] || 0].max
   end
end

# use them

rows.each do |row|
   formatted = []
   row.each_with_index do |cell, idx|
     width = widths[idx]
     format = "%-#{ width }.#{ width }s"
     formatted << (format % cell)
   end
   puts formatted.join(' | ')
end


off the top of my head and super inefficient, but the foundation of  
what you need to do.  pre-compute where possible.

regards.
a @ http://codeforpeople.com/
--
we can deny everything, except that we have the possibility of being  
better. simply reflect on that.
h.h. the 14th dalai lama