Prev: Camera_Project
Next: Formatting directory listings
From: David Ainley on 10 Aug 2010 11:51 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...? -- Posted via http://www.ruby-forum.com/.
From: Ben Bleything on 10 Aug 2010 11:55 On Tue, Aug 10, 2010 at 8:51 AM, David Ainley <wrinkliez(a)gmail.com> wrote: > 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...? You've got a few options, depending on how sophisticated you want to get. Based on that small sample, it looks like the easiest thing to do might be to replace runs of multiple spaces with a single tab. Something like: str.gsub( /\s+/, "\t" ) Otherwise, you could definitely split it on spaces and print using #printf and a carefully-crafted format string. Ben
From: David Ainley on 10 Aug 2010 13:19 Ben Bleything wrote: > On Tue, Aug 10, 2010 at 8:51 AM, David Ainley <wrinkliez(a)gmail.com> > wrote: >> 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...? > > You've got a few options, depending on how sophisticated you want to > get. Based on that small sample, it looks like the easiest thing to > do might be to replace runs of multiple spaces with a single tab. > Something like: > > str.gsub( /\s+/, "\t" ) > > Otherwise, you could definitely split it on spaces and print using > #printf and a carefully-crafted format string. > > Ben Thanks for the response! It seems to be working, except for the two packages that deal with AlexanderHungenberg. With one tab, his name is too long for the date to be formatted correctly ( http://pastebin.com/g8gEcvhJ ). I thought that having two tabs instead of one might fix the problemm but then the date is still jutted out ( http://pastebin.com/CB13TZ6E ). This isn't that massive of a problem (Alexander just has a unconditionally long username), but, anyways, any ideas? -- Posted via http://www.ruby-forum.com/.
From: Joseph E. Savard on 10 Aug 2010 13:31 str = Array.new str << "gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-05)" str << "gm-notify 0.9-0~ppa6 TomVetterlein (2009-05-15)" str << "gm-notify 0.10.2-1~ppa1 AlexanderHungenberg (2010-05-13)" str << "gm-notify 0.9+r39-1~ppa1 SeanStoops (2009-12-22)" str << "gm-notify 0.9-0~ppa7 NikolaKovacs (2009-09-27)" str << "gm-notify 0.8-0ppa2 TomVetterlein (2009-04-27)" str.each { |s| s.split.each { |f| print(format("%25s", f.to_s)) } puts "" } Im sure theres a cleaner way but this way you can play with it. > From: David Ainley <wrinkliez(a)gmail.com> > Reply-To: <ruby-talk(a)ruby-lang.org> > Newsgroups: comp.lang.ruby > Date: Wed, 11 Aug 2010 00:51:32 +0900 > To: ruby-talk ML <ruby-talk(a)ruby-lang.org> > Subject: changing the spacing in a string? > > 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...? > -- > Posted via http://www.ruby-forum.com/. >
From: Josh Cheek on 10 Aug 2010 14:02
[Note: parts of this message were removed to make it a legal post.] On Tue, Aug 10, 2010 at 10:51 AM, David Ainley <wrinkliez(a)gmail.com> wrote: > 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...? > -- > Posted via http://www.ruby-forum.com/. > > # 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) |