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.rubyrailways.com
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
sprintf("%05d",123) # 'd' not 's'
=> "00123"
···
----- 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"
Bernard Kenik wrote:
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
···
----- Original Message ----- From: "Peter Szinek" <peter@rubyrailways.com>
__
http://www.rubyrailways.com
Peter Szinek wrote:
Bernard Kenik wrote:
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$
···
----- Original Message ----- From: "Peter Szinek" <peter@rubyrailways.com>
This is the correct behavior of sprintf for strings
···
----- 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
Hi,
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
···
In message "Re: sprintf bug (?)" on Mon, 13 Nov 2006 07:03:44 +0900, Timothy Hunter <TimHunter@nc.rr.com> writes:
~~~~~~~~~~~~~~~
undefined.
~~~~~~~~~
zero option affects some specifiers. %s is not among them.
matz.
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.rubyrailways.com
I suggest that the OP asks ruby's description of sprintf via "ri sprintf" ... it is essentially as described above
···
----- 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.