indent strings(make them lined up)

J

Jon Kim

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

Intransition

Hi,

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

there is strings like below:

www.google.com=3D> 123.123.123.12www.ibm.com=3D> 123.112.123.12www.iowaha= wkeyes=3D> 123.123.112.12

i want to make above like next

www.google.com=A0 =A0 =3D> 123.123.123.12www.ibm.com=A0 =A0 =A0 =A0=3D> 1=
23.112.123.12www.iowahawkeyes=A0 =3D> 123.123.112.12
original code was

puts (dns + " =3D> " + ip)

I tried next code

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

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

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

Steve Wilhelm

Thomas said:
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]
 
J

Justin Collins

Jon said:
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
 
R

Rob Biedenharn

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.

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 Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 
R

Robert Klemme

=BD =EF=BF=BD =EF=BF=BD =EF=BF=BD=3D> 123.112.123.12www.iowahawkeyes=EF=BF=
=BD =3D> 123.123.112.12
original code was

puts (dns + " =3D> " + ip)

I tried next code

puts (dns + " =EF=BF=BD"*(20 - dns.length) + " =3D > " + 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 =3D> %s" % [dns, ip]

I'd prefer printf in that case

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

Cheers

robert

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

W. James

Jon said:
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


--
 
R

Rob Biedenharn

Jon said:
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


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 <[email protected]> gets something from all the
responses.

-Rob

Rob Biedenharn http://agileconsultingllc.com
(e-mail address removed)
 

Ask a Question

Want to reply to this thread or ask your own question?

You'll need to choose a username for the site, which only take a couple of moments. After that, you can post your question and our members will help you out.

Ask a Question

Members online

No members online now.

Forum statistics

Threads
473,770
Messages
2,569,586
Members
45,085
Latest member
cryptooseoagencies

Latest Threads

Top