Re: std.array oddness
On Sun, 14 Dec 2014 05:15:43 + earthfront via Digitalmars-d-learn digitalmars-d-learn@puremagic.com wrote: On Saturday, 13 December 2014 at 06:40:41 UTC, ketmar via Digitalmars-d-learn wrote: auto names = File(names.txt) .byLine!(char,char)(KeepTerminator.no, ',') .map!a.idup .array; Awesome. map!idup does the trick. I had looked at the byLine doc before posting, in particular, this line: Note: 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. This explains the behavior though I didn't get it then. It's talking about the range methods. Following the component based stuff from Walter's article can be brain-bendy. And in this case, requires careful reading of the docs. But I like it. it's a matter of time to become used with that ranges stuff. but then you will start seeing ranges everywhere. ;-) signature.asc Description: PGP signature
Re: std.array oddness
ketmar: no, you are using `.byLine` incorrectly. ;-) `.byLine` reuses it's internal buffer for each line, so you have to copy that buffer. A simple solution is to use byLineCopy (that unfortunately should have been the default behavior since the beginning). Bye, bearophile
Re: std.array oddness
On Sat, 13 Dec 2014 10:01:49 + bearophile via Digitalmars-d-learn digitalmars-d-learn@puremagic.com wrote: no, you are using `.byLine` incorrectly. ;-) `.byLine` reuses it's internal buffer for each line, so you have to copy that buffer. A simple solution is to use byLineCopy (that unfortunately should have been the default behavior since the beginning). that thing is not documented on dlang.org (i assume that it's from upcoming 2.067). signature.asc Description: PGP signature
Re: std.array oddness
On Saturday, 13 December 2014 at 06:40:41 UTC, ketmar via Digitalmars-d-learn wrote: .map!a.idup That can be just .map!idup.
Re: std.array oddness
On Sat, 13 Dec 2014 12:07:27 + thedeemon via Digitalmars-d-learn digitalmars-d-learn@puremagic.com wrote: On Saturday, 13 December 2014 at 06:40:41 UTC, ketmar via Digitalmars-d-learn wrote: .map!a.idup That can be just .map!idup. it depends of compiler version, as `idup` was a property some time ago. better be safe than sorry. signature.asc Description: PGP signature
Re: std.array oddness
On Saturday, 13 December 2014 at 06:40:41 UTC, ketmar via Digitalmars-d-learn wrote: auto names = File(names.txt) .byLine!(char,char)(KeepTerminator.no, ',') .map!a.idup .array; Awesome. map!idup does the trick. I had looked at the byLine doc before posting, in particular, this line: Note: 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. This explains the behavior though I didn't get it then. It's talking about the range methods. Following the component based stuff from Walter's article can be brain-bendy. And in this case, requires careful reading of the docs. But I like it. Thanks!
Re: std.array oddness
On Sat, 13 Dec 2014 05:15:08 + earthfront via Digitalmars-d-learn digitalmars-d-learn@puremagic.com wrote: Am I using array incorrectly? no, you are using `.byLine` incorrectly. ;-) `.byLine` reuses it's internal buffer for each line, so you have to copy that buffer. like this: import std.array, std.stdio; void main () { // Converting to array borks the thing import std.algorithm : map; auto names = File(names.txt) .byLine!(char,char)(KeepTerminator.no, ',') .map!a.idup .array; foreach (name; names) writeln(name); } signature.asc Description: PGP signature