Gabriel Laskar wrote:
Hi,
I am searching how to do a formatted string like with sprintf()
I have found std.format.formattedWrite() but when I try :
Appender!(string) msg;
formattedWrite(msg, "toto: %0", 42);
writeln(msg);
It fails with :
core.exception.rangeer...@�(1582): Range violation
I have also found std.string.format, but it seems to fail also.
There are two problems here:
1. Your format specification is wrong. %0 is not a valid specifier.
2. msg isn't a string, it's an Appender. Extract its contents with
Appender.data instead.
Here's one example of how to do it:
Appender!string msg;
formattedWrite(msg, "toto: %s", 42);
write(msg.data);
If you meant to use positional parameters, then the first parameter is
number 1, not 0, and you also need a format specifier. The syntax is then
formattedWrite(msg, "toto: %1$s", 42);
(This is the POSIX syntax, check out
http://opengroup.org/onlinepubs/009695399/functions/printf.html for the
full specification.)
-Lars