Fully justified/center justified output

B

Ben Thomas

Hi, how do I go about fully justifying/center justifying output text in
ruby?

I'm guessing I have to use sprintf but I can't seem to get it working
properly, not sure of the correct "%" characters (don't know the proper
name for them).

Thanks,
Ben
 
P

Philip Hallstrom

Hi, how do I go about fully justifying/center justifying output text in ruby?
I'm guessing I have to use sprintf but I can't seem to get it working
properly, not sure of the correct "%" characters (don't know the proper name
for them).

http://corelib.rubyonrails.org/classes/String.html#M001536

str.center(integer, padstr) => new_str

If integer is greater than the length of str, returns a new String of
length integer with str centered and padded with padstr; otherwise,
returns str.

"hello".center(4) #=> "hello"
"hello".center(20) #=> " hello "
"hello".center(20, '123') #=> "1231231hello12312312"
 
J

Juozas Gaigalas

Philip said:
http://corelib.rubyonrails.org/classes/String.html#M001536

str.center(integer, padstr) => new_str

If integer is greater than the length of str, returns a new String of
length integer with str centered and padded with padstr; otherwise,
returns str.

"hello".center(4) #=> "hello"
"hello".center(20) #=> " hello "
"hello".center(20, '123') #=> "1231231hello12312312"
If you're printing to terminal, you'll need to know the terminal width
before use can use String#center. This is simple in Windows because
cmd.exe terminal is fixed-width. In Linux and OSX this is more
complicated. The easiest way I know is this:

require "curses"

width = Curses::cols
"hello".center(width)

It's not totally clear from your post if this is what you're trying to
do, but if it is I hope this works you.
 
B

Ben Thomas

Juozas said:
If you're printing to terminal, you'll need to know the terminal width
before use can use String#center. This is simple in Windows because
cmd.exe terminal is fixed-width. In Linux and OSX this is more
complicated. The easiest way I know is this:

require "curses"

width = Curses::cols
"hello".center(width)

It's not totally clear from your post if this is what you're trying to
do, but if it is I hope this works you.

Yeah I think that's what I want from what I can see.

Can't get it to work for what I want though because the data is in an
array. Tried converting it to a string but can't work that out either.
Not been doing ruby long as you might have guessed!

Thanks,
Ben.
 
M

Michael Fellinger

If you're printing to terminal, you'll need to know the terminal width
before use can use String#center. This is simple in Windows because
cmd.exe terminal is fixed-width. In Linux and OSX this is more
complicated. The easiest way I know is this:

require "curses"

width = Curses::cols
"hello".center(width)

It's not totally clear from your post if this is what you're trying to
do, but if it is I hope this works you.

To do that without curses:

h, w = `stty size`.split.map{|e| e.to_i}
# [70, 55]
'foo'.center(w)
# " foo "
 
M

Michael Fellinger

Yeah I think that's what I want from what I can see.

Can't get it to work for what I want though because the data is in an
array. Tried converting it to a string but can't work that out either.
Not been doing ruby long as you might have guessed!

read the documentation of Array... especially #join
 
A

Austin Ziegler

Hi, how do I go about fully justifying/center justifying output text in
ruby?

I'm guessing I have to use sprintf but I can't seem to get it working
properly, not sure of the correct "%" characters (don't know the proper
name for them).

Check out Text::Format. It will even work with Text::Hyphen to
properly hyphenate your text.

http://rubyforge.org/projects/text-format/

I think that's right. Like my own home number, I don't tend to visit
my own project pages that often. ;)

-austin
 
J

Jan Svitok

This is simple in Windows because cmd.exe terminal is fixed-width.

Not always. You can manually specify different size (at least in XP+
and I guess in 2000 as well).
 

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

Forum statistics

Threads
473,764
Messages
2,569,566
Members
45,041
Latest member
RomeoFarnh

Latest Threads

Top