writef, positional arguments, and array formatting
KennyTM~
kennytm at gmail.com
Thu Oct 9 09:34:07 PDT 2008
Andrei Alexandrescu wrote:
> I don't want to divert anyone's attention from more important issues,
> but I'm running into a few little problems here with writef and friends.
>
> 1. Printing only some arguments
>
> Currently writef insist on formatting all arguments, even those that
> don't have a format spec allocated. This creates problem in an app of
> mine that takes a format string as a command-line argument and
> selectively prints stuff. For example:
>
> ./kernelize --format='%1$s %2$s'
>
> The call is:
>
> uint id1, id2;
> float value;
> ...
> writefln(format, id1, id2, value);
>
> I need:
>
> 12 23
>
> But instead I get:
>
> 12 230.34
>
> I wonder how this could be addressed. Should presence of positional
> parameters suppress the "print'em all" approach?
>
Just use/add the C# (Tango) formatting scheme?
> 2. Formatting arrays
>
> This has been an ongoing problem with formatting functions: there's no
> proper formatting for arrays beyound writing %s and formatting the
> entire array with [e0 e1 ... en]. I was thinking of improving that like
> this:
>
> int[] a = [ 42, 1, 2 ];
> writefln("%(s, )", a); // prints "42, 1, 2"
>
> "%(" opens a spec that will be applied to each element of the array. For
> the last element, only the format part of the spec applies, not the
> trailing string (in the example above ", "). One nice thing is that the
> specs can be nested, so:
>
> int[][] a = [ [ 42, 1, 2 ], [ 3, 4 ] ];
> writefln("%((s, )\n)", a); // prints "42, 1, 2"
>
> will print:
>
> 42, 1, 2
> 3, 4
>
> that is, one subarray per line with elements separated with commas and
> spaces.
>
> Is this something you'd use?
>
>
> Andrei
More information about the Digitalmars-d
mailing list