[Note: parts of this message were removed to make it a legal post.]
Hey guys. I have an array full of strings. When I put the strings, it
looks like this
http://pastebin.com/eeicUCqL which is okay, but it looks
a little sloppy to me. Is there a way I can get the strings to
dynamically space themselves so that they look evenly spaced? ala
http://pastebin.com/cRcG97sK ? Should I split each string into it's
separate parts, and then print them via format? Or something...?
# counts the length of each string based on column
# returns the max for each column across all rows
def get_widths(array_of_arrays_of_strings)
widths = Array.new
array_of_arrays_of_strings.each do |strings|
strings.each_with_index do |string,index|
widths[index] = string.length if !widths[index] || widths[index] <
string.length
end
end
widths
end
# the data itself -- you haven't show what format it is in, this is just a
guess
data = [
'gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-05)',
'gm-notify 0.9-0~ppa6 TomVetterlein (2009-05-15)' ,
'gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-13)',
'gm-notify 0.9+r39-1~ppa1 SeanStoops (2009-12-22)' ,
'gm-notify 0.9-0~ppa7 NikolaKovacs (2009-09-27)' ,
'gm-notify 0.8-0ppa2 TomVetterlein (2009-04-27)' ,
]
# split the strings on whitespace so they are now arrays of strings
data.map!(&:split)
# get an array of max widths for each row
widths = get_widths data # => [9, 14, 19, 12]
# turn the widths into a format string (contains the spacing information)
format = widths.map { |width| "%-#{width}s" }.join(' ')
format # => "%-9s %-14s %-19s %-12s"
# format and output the strings
data.each { |strings| puts format % strings }
# >> gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-05)
# >> gm-notify 0.9-0~ppa6 TomVetterlein (2009-05-15)
# >> gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-13)
# >> gm-notify 0.9+r39-1~ppa1 SeanStoops (2009-12-22)
# >> gm-notify 0.9-0~ppa7 NikolaKovacs (2009-09-27)
# >> gm-notify 0.8-0ppa2 TomVetterlein (2009-04-27)