Spacing data into columns

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!

···

--
Posted via http://www.ruby-forum.com/.

# 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/

···

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!

--
we can deny everything, except that we have the possibility of being better. simply reflect on that.
h.h. the 14th dalai lama

http://api.rubyreports.org/

If you're going to do a lot of this sort of thing.

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!

--
Ron Fox
NSCL
Michigan State University
East Lansing, MI 48824-1321

Here's another approach - a bit more lightweight but you need
knowledge about max widths:

irb(main):001:0> data = [
irb(main):002:1* %w{abc def ghi},
irb(main):003:1* %w{foo bar baz}
irb(main):004:1> ]
=> [["abc", "def", "ghi"], ["foo", "bar", "baz"]]
irb(main):005:0> data.each do |row|
irb(main):006:1* printf "%-10s | %-10s | %-10s\n", *row
irb(main):007:1> end
abc | def | ghi
foo | bar | baz
=> [["abc", "def", "ghi"], ["foo", "bar", "baz"]]

Kind regards

robert

···

2008/6/23 ara.t.howard <ara.t.howard@gmail.com>:

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)

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

--
use.inject do |as, often| as.you_can - without end