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"

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, Ben Thomas <user@example.com> 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).

--
Austin Ziegler * halostatue@gmail.com * http://www.halostatue.ca/
               * austin@halostatue.ca * You are in a maze of twisty little passages, all alike. // halo • statue
               * austin@zieglers.ca

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

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.

To do that without curses:

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

···

On 11/16/06, Juozas Gaigalas <juozas@tuesdaystudios.com> wrote:

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

Juozas Gaigalas wrote:

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

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.

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.

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

···

On 11/15/06, Juozas Gaigalas <juozas@tuesdaystudios.com> wrote:

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

Juozas Gaigalas wrote:
> Philip Hallstrom 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).
>>
>> 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.
>

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/16/06, Ben Thomas <user@example.com> wrote:

Thanks,
Ben.

Ben Thomas 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?

···

--
Paul Lutus
http://www.arachnoid.com