Reading file by line, weird result

Marco Leise Marco.Leise at gmx.de
Fri Dec 27 02:36:55 PST 2013


Am Fri, 27 Dec 2013 10:24:15 +0000
schrieb "Dfr" <deflexor at yandex.ru>:

> On Friday, 27 December 2013 at 09:44:22 UTC, lomereiter wrote:
> > The solution is to append `line.dup` instead of `line`.
> >
> > I guess this note in the documentation should be marked red:
> >> Each front will not persist after popFront is called, so the 
> >> caller must copy its contents (e.g. by calling to!string) if 
> >> retention is needed.
> 
> Thank you, .dup helped.

To avoid allocating new memory for each line of text, byLine
reuses the buffer. You are supposed to make a duplicate if you
plan to keep it. It would be different if you had:

  string s;
  foreach (line; frange) {
      s ~= line
  }

in which case, the _contents_ of the line buffer, not the buffer
itself are appended to the string s.

-- 
Marco



More information about the Digitalmars-d-learn mailing list