digitalmars.D.learn - std.array.array broken?
- deed (10/10) Feb 01 2014 ---
- Andrej Mitrovic (19/22) Feb 01 2014 Docs also say:
- deed (3/26) Feb 01 2014 so array copy the copied fronts?
- Francesco Cattoglio (7/17) Feb 01 2014 Sorry, but I really don't understand this. At all.
- bearophile (6/9) Feb 01 2014 Beside the answers that others have already given you, another
- deed (2/11) Feb 01 2014 Thanks
--- import std.stdio; import std.array; auto lines = File(filename).byLine.array; writeln(lines); // Crap --- dmd 2.064(.2 I think) Docs say: - std.stdio.byLine returns an input range - std.array.array takes an input range
Feb 01 2014
On Saturday, 1 February 2014 at 22:47:54 UTC, deed wrote:Docs say: - std.stdio.byLine returns an input range - std.array.array takes an input rangeDocs also say: /** Note: Each $(D front) will not persist after $(D popFront) is called, so the caller must copy its contents (e.g. by calling $(D to!string)) if retention is needed. */ So you need to do a duplication for each element. Use this code: ----- import std.stdio; import std.array; import std.algorithm; void main() { auto lines = File("test.d").byLine.map!(a => a.dup).array; writeln(lines); } -----
Feb 01 2014
On Saturday, 1 February 2014 at 22:52:24 UTC, Andrej Mitrovic wrote:On Saturday, 1 February 2014 at 22:47:54 UTC, deed wrote:so array copy the copied fronts?Docs say: - std.stdio.byLine returns an input range - std.array.array takes an input rangeDocs also say: /** Note: Each $(D front) will not persist after $(D popFront) is called, so the caller must copy its contents (e.g. by calling $(D to!string)) if retention is needed. */ So you need to do a duplication for each element. Use this code: ----- import std.stdio; import std.array; import std.algorithm; void main() { auto lines = File("test.d").byLine.map!(a => a.dup).array; writeln(lines); } -----
Feb 01 2014
On Saturday, 1 February 2014 at 22:52:24 UTC, Andrej Mitrovic wrote:On Saturday, 1 February 2014 at 22:47:54 UTC, deed wrote: Docs also say: /** Note: Each $(D front) will not persist after $(D popFront) is called, so the caller must copy its contents (e.g. by calling $(D to!string)) if retention is needed. */ So you need to do a duplication for each element. Use this code:Sorry, but I really don't understand this. At all. "Returns a newly-allocated dynamic array consisting of a copy of the input range" to me sounds "Hey, I'm doing a copy". How is one supposed to understand that you need to go through hops for getting a good result?
Feb 01 2014
deed:auto lines = File(filename).byLine.array; writeln(lines); // Crap ---Beside the answers that others have already given you, another way to do that is to read the whole file (with read or readText) and then use splitlines on the string. Bye, bearophile
Feb 01 2014
On Saturday, 1 February 2014 at 22:59:12 UTC, bearophile wrote:deed:Thanksauto lines = File(filename).byLine.array; writeln(lines); // Crap ---Beside the answers that others have already given you, another way to do that is to read the whole file (with read or readText) and then use splitlines on the string. Bye, bearophile
Feb 01 2014