Spacing data into columns

J

Justin To

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!
 
A

ara.t.howard

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

Robert Klemme

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

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
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,776
Messages
2,569,603
Members
45,189
Latest member
CryptoTaxSoftware

Latest Threads

Top