[lnkForumImage]
TotalShareware - Download Free Software

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


 

Forums >

comp.lang.ruby

sprintf bug (?

Peter Szinek

11/11/2006 6:29:00 PM

Hello all,

I am wondering if I have just found a bug in (s)printf...

According to the PickAxe, table "sprintf flag characters":

================= snip ==================================

0 (zero) all Pad with zeros, not spaces.

================= snip ==================================

so I think this call

irb(main):053:0> sprintf("%05s", 123)
=> " 123"

should correctly result in

"00123"

or I am getting something wrong?

thanks,
Peter

__
http://www.rubyra...


8 Answers

Joel VanderWerf

11/11/2006 6:49:00 PM

0

Peter Szinek wrote:
> Hello all,
>
> I am wondering if I have just found a bug in (s)printf...
>
> According to the PickAxe, table "sprintf flag characters":
>
> ================= snip ==================================
>
> 0 (zero) all Pad with zeros, not spaces.
>
> ================= snip ==================================
>
> so I think this call
>
> irb(main):053:0> sprintf("%05s", 123)
> => " 123"
>
> should correctly result in
>
> "00123"
>
> or I am getting something wrong?

I think ruby follows the C standard, which says zero padding only
applies to numeric formats.

--
vjoel : Joel VanderWerf : path berkeley edu : 510 665 3407

Bernard Kenik

11/12/2006 9:21:00 PM

0


----- Original Message -----
From: "Peter Szinek" <peter@rubyrailways.com>
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Sent: Saturday, November 11, 2006 1:28 PM
Subject: sprintf bug (?)


> Hello all,
>
> I am wondering if I have just found a bug in (s)printf...
>
> According to the PickAxe, table "sprintf flag characters":
>
> ================= snip ==================================
>
> 0 (zero) all Pad with zeros, not spaces.
>
> ================= snip ==================================
>
> so I think this call
>
> irb(main):053:0> sprintf("%05s", 123)
> => " 123"
>
> should correctly result in
>
> "00123"
>
sprintf("%05d",123) # 'd' not 's'
=> "00123"


Peter Szinek

11/12/2006 9:44:00 PM

0

Bernard Kenik wrote:
>
> ----- Original Message ----- From: "Peter Szinek" <peter@rubyrailways.com>
> To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
> Sent: Saturday, November 11, 2006 1:28 PM
> Subject: sprintf bug (?)
>
>
>> Hello all,
>>
>> I am wondering if I have just found a bug in (s)printf...
>>
>> According to the PickAxe, table "sprintf flag characters":
>>
>> ================= snip ==================================
>>
>> 0 (zero) all Pad with zeros, not spaces.
>>
>> ================= snip ==================================
>>
>> so I think this call
>>
>> irb(main):053:0> sprintf("%05s", 123)
>> => " 123"
>>
>> should correctly result in
>>
>> "00123"
>>
> sprintf("%05d",123) # 'd' not 's'
> => "00123"

:) I know 'd' is not 's', it was a bad example. It should have been

irb(main):002:0> sprintf("%10s",'hello')
=> " hello"

(there are no zeroes...)

Peter

__
http://www.rubyra...




Tim Hunter

11/12/2006 10:04:00 PM

0

Peter Szinek wrote:
> Bernard Kenik wrote:
>
>> ----- Original Message ----- From: "Peter Szinek" <peter@rubyrailways.com>
>> To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
>> Sent: Saturday, November 11, 2006 1:28 PM
>> Subject: sprintf bug (?)
>>
>>
>>
>>> Hello all,
>>>
>>> I am wondering if I have just found a bug in (s)printf...
>>>
>>> According to the PickAxe, table "sprintf flag characters":
>>>
>>> ================= snip ==================================
>>>
>>> 0 (zero) all Pad with zeros, not spaces.
>>>
>>> ================= snip ==================================
>>>
>>> so I think this call
>>>
>>> irb(main):053:0> sprintf("%05s", 123)
>>> => " 123"
>>>
>>> should correctly result in
>>>
>>> "00123"
>>>
>>>
>> sprintf("%05d",123) # 'd' not 's'
>> => "00123"
>>
>
> :) I know 'd' is not 's', it was a bad example. It should have been
>
> irb(main):002:0> sprintf("%10s",'hello')
> => " hello"
>
> (there are no zeroes...)
>
> Peter
>

Possibly you meant "%010s" instead of "%10s"? In any case, I checked the
output of a C program compiled with gcc on my Powerbook running OS X
10.8. In this case, the '0' flag adds padding on the left:

ruby$ cat testit.c
#include <stdio.h>

int main(int argc, char *argv[])
{
printf("%010s", "hello\n");
return 0;
}

ruby$ ./testit
0000hello
ruby$


Yukihiro Matsumoto

11/12/2006 11:35:00 PM

0

Hi,

In message "Re: sprintf bug (?)"
on Mon, 13 Nov 2006 07:03:44 +0900, Timothy Hunter <TimHunter@nc.rr.com> writes:

|Possibly you meant "%010s" instead of "%10s"? In any case, I checked the
|output of a C program compiled with gcc on my Powerbook running OS X
|10.8. In this case, the '0' flag adds padding on the left:

This is platform dependent. Linux manpage says:

0 The value should be zero padded. For d, i, o, u, x, X,
a, A, e, E, f, F, g, and G conversions, the converted
value is padded on the left with zeros rather than
blanks. If the 0 and - flags both appear, the 0 flag is
ignored. If a precision is given with a numeric
conversion (d, i, o, u, x, and X), the 0 flag is
ignored. For other conversions, the behavior is
~~~~~~~~~~~~~~~
undefined.
~~~~~~~~~

zero option affects some specifiers. %s is not among them.

matz.

Peter Szinek

11/13/2006 7:04:00 AM

0

Yukihiro Matsumoto wrote:
> zero option affects some specifiers. %s is not among them.

Thank, Matz. This made it really clear at last...

Peter
__
http://www.rubyra...


Bernard Kenik

11/14/2006 1:19:00 AM

0


----- Original Message -----
From: "Peter Szinek" <peter@rubyrailways.com>
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Sent: Sunday, November 12, 2006 4:43 PM
Subject: Re: sprintf bug (?)


> Bernard Kenik wrote:
>>
>> ----- Original Message ----- From: "Peter Szinek"
>> <peter@rubyrailways.com>
>> To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
>> Sent: Saturday, November 11, 2006 1:28 PM
>> Subject: sprintf bug (?)
>>
>>
>>> Hello all,
>>>
>>> I am wondering if I have just found a bug in (s)printf...
>>>
>>> According to the PickAxe, table "sprintf flag characters":
>>>
>>> ================= snip ==================================
>>>
>>> 0 (zero) all Pad with zeros, not spaces.
>>>
>>> ================= snip ==================================
>>>
>>> so I think this call
>>>
>>> irb(main):053:0> sprintf("%05s", 123)
>>> => " 123"
>>>
>>> should correctly result in
>>>
>>> "00123"
>>>
>> sprintf("%05d",123) # 'd' not 's'
>> => "00123"
>
> :) I know 'd' is not 's', it was a bad example. It should have been
>
> irb(main):002:0> sprintf("%10s",'hello')
> => " hello"
>
> (there are no zeroes...)
>
> Peter
>

This is the correct behavior of sprintf for strings


Bernard Kenik

11/14/2006 1:43:00 AM

0


----- Original Message -----
From: "Yukihiro Matsumoto" <matz@ruby-lang.org>
To: "ruby-talk ML" <ruby-talk@ruby-lang.org>
Sent: Sunday, November 12, 2006 6:34 PM
Subject: Re: sprintf bug (?)


> Hi,
>
> In message "Re: sprintf bug (?)"
> on Mon, 13 Nov 2006 07:03:44 +0900, Timothy Hunter
> <TimHunter@nc.rr.com> writes:
>
> |Possibly you meant "%010s" instead of "%10s"? In any case, I checked the
> |output of a C program compiled with gcc on my Powerbook running OS X
> |10.8. In this case, the '0' flag adds padding on the left:
>
> This is platform dependent. Linux manpage says:
>
> 0 The value should be zero padded. For d, i, o, u, x, X,
> a, A, e, E, f, F, g, and G conversions, the converted
> value is padded on the left with zeros rather than
> blanks. If the 0 and - flags both appear, the 0 flag is
> ignored. If a precision is given with a numeric
> conversion (d, i, o, u, x, and X), the 0 flag is
> ignored. For other conversions, the behavior is
> ~~~~~~~~~~~~~~~
> undefined.
> ~~~~~~~~~
>
> zero option affects some specifiers. %s is not among them.
>
> matz.
>
I suggest that the OP asks ruby's description of sprintf via "ri sprintf"
... it is essentially as described above