Re: [v][sf]printf additions (#, E, g, G)
| From: | Gwynne | Date: | Sat, 22 Jul 2006 18:44:34 +0000 |
| Subject: | Re: [v][sf]printf additions (#, E, g, G) | ||
| References: | 1 2 | Groups: | php.internals |
| Request: | Send a blank email to internals+get-24883@lists.php.net to get a copy of this message | ||
On Jul 20, 2006, at 3:21 PM, Marcus Boerger wrote:
While we're on the subject, one of my favorite personal patches to PHP is one that adds the %n specifier. The parameter to %n is a reference which recieves the total length of the string with all replacements so far. %n itself is replaced by nothing at all. You could do this with $n = strlen( $s = sprintf( blah blah blah ) ) + strlen( $s .= sprintf( the rest of the blah ) );, but it's a very nice shortcut if you need the replaced length in the middle of the conversion or for a situation like this (and the above doesn't work too well if you have positional params!): printf( "Some processing message with %s replacements...%n", 'some', &$n ); // do some stuff here print str_repeat( ' ', $n ) . "\rSome status text here that doesn't worry about whether the replaced text was longer."; Here's the printf(3) manpage description for %n (MacOS X system, BSD manpage):I've wished there was a *printf() float specifier that wouldn't include trailing zeros/point, as simply converting to string (echo, %s, etc.) can result in scientific notation, which I *don't* want (%g in convert_to_string()). The only other way that would result in what I want is number_format() with my "no-extra-zeros option" patch. ;-) So I was originally looking for how to NOT pad %f to the specified precision, then I thought why not add more of the stuff from C? (And I see it's marked "not done" in formatted_print.c.)Can/should I go ahead and add support for the # flag/specifier, g/G, and E (the missing compliment to e)? Make everything work like C, except # used with f/F, which would mean "remove trailing 0's/point" -- as C's behavior with # and f (add point even when precision=0?) can be done in PHP. (I assume C's is for when precision is specified with * + parameter?)Having more conversion specifiers here won't hurt. If it can be done in a way compatible to other languages especially like C it should be done in that way. If PHP has already closed the way by choosing opposite defaults the opposite should everntually also work.
n The number of characters written so far is stored into the inte-
ger indicated by the int * (or variant) pointer argument. No
argument is converted.
Any chance of getting this into PHP? I can provide a patch.
-- Gwynne, Daughter of the Code
"This whole world is an asylum for the incurable."