[lnkForumImage]
TotalShareware - Download Free Software

Confronta i prezzi di migliaia di prodotti.
Asp Forum
 Home | Login | Register | Search 


 

Forums >

comp.lang.ruby

Fully justified/center justified output

Fair Play

11/15/2006 8:43:00 PM

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

8 Answers

Philip Hallstrom

11/15/2006 9:24:00 PM

0

Juozas Gaigalas

11/15/2006 10:05:00 PM

0

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


Fair Play

11/15/2006 11:26:00 PM

0

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

Michael Fellinger

11/15/2006 11:29:00 PM

0

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.ht...
> >
> > 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 "

Michael Fellinger

11/15/2006 11:40:00 PM

0

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

> Thanks,
> Ben.

Paul Lutus

11/15/2006 11:42:00 PM

0

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

Austin Ziegler

11/16/2006 5:13:00 AM

0

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

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

http://rubyforge.org/projects/te...

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

-austin
--
Austin Ziegler * halostatue@gmail.com * http://www.halo...
* austin@halostatue.ca * http://www.halo...feed/
* austin@zieglers.ca

Jano Svitok

11/16/2006 8:29:00 AM

0

On 11/15/06, Juozas Gaigalas <juozas@tuesdaystudios.com> 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).