[Issue 11465] New: std.stdio.byLine(KeepTerminator.no) troubles on Windows
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Thu Nov 7 02:55:34 PST 2013
https://d.puremagic.com/issues/show_bug.cgi?id=11465
Summary: std.stdio.byLine(KeepTerminator.no) troubles on
Windows
Product: D
Version: D2
Platform: x86
OS/Version: Windows
Status: NEW
Severity: enhancement
Priority: P2
Component: Phobos
AssignedTo: nobody at puremagic.com
ReportedBy: bearophile_hugs at eml.cc
--- Comment #0 from bearophile_hugs at eml.cc 2013-11-07 02:55:32 PST ---
This is related to Issue 5378.
This is a little program named "test.d", it loads the lines of its source code:
void main() {
import std.stdio;
"test.d".File.byLine.writeln;
writeln;
"test.d".File.byLine(KeepTerminator.no).writeln;
writeln;
"test.d".File.byLine(KeepTerminator.no, "\r\n").writeln;
}
Its output dmd 2.064 ("test.d" was saved with Windows newlines):
["void main() {\r", " import std.stdio;\r", "
\"test.d\".File.byLine.writeln;\r", " writeln;\r", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;\r", " writeln;\r", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;\r", "}"]
["void main() {\r", " import std.stdio;\r", "
\"test.d\".File.byLine.writeln;\r", " writeln;\r", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;\r", " writeln;\r", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;\r", "}"]
["void main() {", " import std.stdio;", "
\"test.d\".File.byLine.writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;", "}"]
Notes:
- The first part of the output is not fully expected. Why is it stripping '\n'
and leaving '\r'? I expect end the lines with "\r\n" instead of "\r" (or even
with '\n' as does Python).
- Regarding the second part of the output I think it's not what most Windows
programmers would expect.
- The third part of the output is correct.
So I suggest:
- the std.stdio.byLine overload that has a third argument to default it to the
OS it is compiled for;
- std.stdio.byLine to leave '\n' at the line ends.
So I'd like the output of the program to become:
["void main() {\n", " import std.stdio;\n", "
\"test.d\".File.byLine.writeln;\n", " writeln;\n", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;\n", " writeln;\n", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;\n", "}"]
["void main() {", " import std.stdio;", "
\"test.d\".File.byLine.writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;", "}"]
["void main() {", " import std.stdio;", "
\"test.d\".File.byLine.writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no).writeln;", " writeln;", "
\"test.d\".File.byLine(KeepTerminator.no, \"\\r\\n\").writeln;", "}"]
--
Configure issuemail: https://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list