Indent strings(make them lined up)

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

···

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

"%-30s %s" % [dns, ip]

···

On Dec 7, 11:26 pm, Jon Kim <viashi...@hanmail.net> wrote:

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com=> 123.123.123.12www.ibm.com=> 123.112.123.12www.iowahawkeyes=> 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12www.ibm.com => 123.112.123.12www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

Jon Kim wrote:

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.
  
You could do

puts "#{dns.ljust(20)} => #{ip}"

-Justin

Jon Kim wrote:

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

data =
  %w(blip bleeping rob_the_fraud tor what-pompous-verbosity dreadful).
  map{|s| [s + '.com', (1..4).map{rand 256}.join('.')] }

width = data.map{|a,b| a.size}.max

puts data.map{|a,b| [a.ljust(width),b].join " => " }

=== output ===

blip.com => 249.7.84.219
bleeping.com => 14.120.94.124
rob_the_fraud.com => 252.63.171.160
tor.com => 173.239.40.90
what-pompous-verbosity.com => 56.61.184.48
dreadful.com => 31.56.145.209

···

--

Thomas Sawyer wrote:

···

On Dec 7, 11:26�pm, Jon Kim <viashi...@hanmail.net> wrote:

www.google.com� � => 123.123.123.12www.ibm.com� � � �=> 123.112.123.12www.iowahawkeyes� => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " �"*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

"%-30s %s" % [dns, ip]

Thomas's suggestion of String Format (%) is correct, just revising
example to reflect the original code above.

puts "%-20s => %s" % [dns, ip]
--
Posted via http://www.ruby-forum.com/\.

Jon Kim wrote:

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

You could do

puts "#{dns.ljust(20)} => #{ip}"

-Justin

OK, I'm going to go out on a limb and presume that you obtain the successive dns and ip values from some sort of data structure. I'm going to further assume a hash since you're using the association syntax in your output string, but feel free to generalize the parts of this code that handle that iteration.

my_data = {

?> 'www.google.com' => '216.68.119.70',
?> 'www.ibm.com' => '129.42.60.216',
?> 'www.iowahawkeyes.com' => '199.108.163.135',
?> }
=> {"www.google.com"=>"216.68.119.70", "www.ibm.com"=>"129.42.60.216", "www.iowahawkeyes.com"=>"199.108.163.135"}

width = my_data.keys.inject(0) {|wmax,dns| [dns.length, wmax].max }

=> 20

my_data.each do |dns,ip|

?> puts "%-*s => %s"%[width, dns, ip]

  end

www.google.com => 216.68.119.70
www.ibm.com => 129.42.60.216
www.iowahawkeyes.com => 199.108.163.135
=> {"www.google.com"=>"216.68.119.70", "www.ibm.com"=>"129.42.60.216", "www.iowahawkeyes.com"=>"199.108.163.135"}

?> my_data['www.letmegooglethatforyou.com'] = '209.20.88.2'
=> "209.20.88.2"

?> width = my_data.keys.inject(0) {|wmax,dns| [dns.length, wmax].max }
=> 29

my_data.each do |dns,ip|

?> puts "#{dns.ljust(width)} => #{ip}"

  end

www.google.com => 216.68.119.70
www.ibm.com => 129.42.60.216
www.letmegooglethatforyou.com => 209.20.88.2
www.iowahawkeyes.com => 199.108.163.135
=> {"www.google.com"=>"216.68.119.70", "www.ibm.com"=>"129.42.60.216", "www.letmegooglethatforyou.com"=>"209.20.88.2", "www.iowahawkeyes.com"=>"199.108.163.135"}

You could also put a limit on the width of the column so that one long value doesn't "win" or analyze the widths for some other property (like rounding up to a multiple of 4 or something).

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Dec 8, 2009, at 5:11 AM, Justin Collins wrote:

So you missed the phrase "please teach me how to do it" from the OP, huh?

Sorry that you're offended by my distinction between a request to "teach me" versus "show me".

I hope Jon Kim <viashivan@hanmail.net> gets something from all the responses.

-Rob

Rob Biedenharn http://agileconsultingllc.com
Rob@AgileConsultingLLC.com

···

On Dec 9, 2009, at 3:55 AM, W. James wrote:

Jon Kim wrote:

Hi,

I am newbie in Ruby. I have a question about indenting string.

there is strings like below:

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

i want to make above like next

www.google.com => 123.123.123.12
www.ibm.com => 123.112.123.12
www.iowahawkeyes => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " "*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

data =
%w(blip bleeping rob_the_fraud tor what-pompous-verbosity dreadful).
map{|s| [s + '.com', (1..4).map{rand 256}.join('.')] }

width = data.map{|a,b| a.size}.max

puts data.map{|a,b| [a.ljust(width),b].join " => " }

=== output ===

blip.com => 249.7.84.219
bleeping.com => 14.120.94.124
rob_the_fraud.com => 252.63.171.160
tor.com => 173.239.40.90
what-pompous-verbosity.com => 56.61.184.48
dreadful.com => 31.56.145.209

I'd prefer printf in that case

printf "%-20s => %s\n", dns, ip

Cheers

robert

···

2009/12/8 Steve Wilhelm <steve@studio831.com>:

Thomas Sawyer wrote:

On Dec 7, 11:26�pm, Jon Kim <viashi...@hanmail.net> wrote:

www.google.com� � => 123.123.123.12www.ibm.com� � � �=> 123.112.123.12www.iowahawkeyes� => 123.123.112.12

original code was

puts (dns + " => " + ip)

I tried next code

puts (dns + " �"*(20 - dns.length) + " = > " + ip)

but it did not work well. please teach me how to do it.

"%-30s %s" % [dns, ip]

Thomas's suggestion of String Format (%) is correct, just revising
example to reflect the original code above.

puts "%-20s => %s" % [dns, ip]

--
remember.guy do |as, often| as.you_can - without end
http://blog.rubybestpractices.com/