On 11/24/2014 11:04 AM, Suliman wrote:

> I can't understand why foreach loop produce every line by line, while
> it's fuctional analog print lines on one string:
>
> foreach(f; file.byLine())
> {
>      writeln(f);

f is a char[] and writeln prints all strings as their contents i.e. "first string" is printed as

first string

> }
>
> auto file = File("foo.txt","r");
> file
> .byLine()
> .writeln;

In that case the first three lines make a range object. By default, writeln prints ranges as if they are arrays. For this example, the range is a range of strings, so it prints it as

[ "first string" ]

writefln gives us more power:

    auto content = File("foo.txt","r").byLine();
    writefln("%-(%s\n%)", content);

Per-element formatting is specified within %( and %). So, each element would be printed with "%s\n" format. Notes:

1) The dash in %-( means "do not print the double-quotes for strings"

2) Everything after %s in the per-element formatting is taken as element delimiter and writefln does not print the delimiters are not printed for the last element. One may need to use %| to specify the actual delimiters.

Here is the spec:

  http://dlang.org/phobos/std_format.html#.formattedWrite

Here is my rewording:

  http://ddili.org/ders/d.en/formatted_output.html

Ali

Reply via email to