Fully justified/center justified output

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

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"

Philip H. wrote:

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.

Juozas G. wrote:

str.center(integer, padstr) => new_str
If you’re printing to terminal, you’ll need to know the terminal width
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.

On 11/16/06, Juozas G. [email protected] wrote:

str.center(integer, padstr) => new_str
If you’re printing to terminal, you’ll need to know the terminal width
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 "

Ben T. wrote:

/ …

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!

Why not post the relevant code?

On 11/16/06, Ben T. [email protected] wrote:

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!

read the documentation of Array… especially #join

On 11/15/06, Ben T. [email protected] wrote:

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. :wink:

-austin

On 11/15/06, Juozas G. [email protected] wrote:

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