jonk
December 8, 2009, 5:26am
1
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.
jonk
December 8, 2009, 6:10am
2
On Dec 7, 11:26 pm, Jon K. [email protected] 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]
jonk
December 8, 2009, 8:18am
3
Thomas S. wrote:
On Dec 7, 11:26�pm, Jon K. [email protected] 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]
jonk
December 8, 2009, 11:14am
4
Jon K. wrote:
i want to make above like next
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
jonk
December 8, 2009, 2:49pm
5
2009/12/8 Steve W. [email protected] :
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]
I’d prefer printf in that case
printf “%-20s => %s\n”, dns, ip
Cheers
robert
jonk
December 9, 2009, 9:58am
6
Jon K. wrote:
i want to make above like next
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
jonk
December 9, 2009, 2:31pm
7
On Dec 9, 2009, at 3:55 AM, W. James wrote:
width = data.map{|a,b| a.size}.max
what-pompous-verbosity.com => 56.61.184.48
dreadful.com => 31.56.145.209
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 K. [email protected] gets something from all the
responses.
-Rob
Rob B. http://agileconsultingllc.com
[email protected]
jonk
December 8, 2009, 2:33pm
8
On Dec 8, 2009, at 5:11 AM, Justin C. wrote:
-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.
irb> 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”}
irb> width = my_data.keys.inject(0) {|wmax,dns| [dns.length, wmax].max }
=> 20
irb> my_data.each do |dns,ip|
?> puts “%-*s => %s”%[width, dns, ip]
irb> 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”}
irb>
?> my_data[‘www.letmegooglethatforyou.com ’] = ‘209.20.88.2’
=> “209.20.88.2”
irb>
?> width = my_data.keys.inject(0) {|wmax,dns| [dns.length,
wmax].max }
=> 29
irb> my_data.each do |dns,ip|
?> puts “#{dns.ljust(width)} => #{ip}”
irb> 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 B. http://agileconsultingllc.com
[email protected]