[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Spacing data into columns

Justin To

6/23/2008 4:32:00 PM

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-....

3 Answers

ara.t.howard

6/23/2008 4:40:00 PM

0


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://codeforp...
--
we can deny everything, except that we have the possibility of being
better. simply reflect on that.
h.h. the 14th dalai lama




Ron Fox

6/24/2008 10:55:00 AM

0

http://api.rubyre...

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

Robert Klemme

6/24/2008 11:09:00 AM

0

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.

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

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