Line endings when redirecting output to file on windows.

Bastiaan Veelo Bastiaan at Veelo.net
Sun Jun 3 16:24:14 UTC 2018


On Sunday, 3 June 2018 at 15:42:48 UTC, rikki cattermole wrote:
> On 04/06/2018 3:24 AM, Bastiaan Veelo wrote:
>> I need some help understanding where extra '\r' come from when 
>> output is redirected to file on Windows.
>> 
>> First, this works correctly:
>>   rdmd --eval="(\"hello\" ~ newline).toFile(\"out.txt\");"
>> As expected, out.txt contains "hello\r\n".
>> 
>> I would expect the following to do the same, but it doesn't:
>>   rdmd --eval="write(\"hello\" ~ newline);" > out.txt
>> Now out.txt contains "hello\r\r\n".
>> 
>> Who is doing the extra conversion here, and how do I stop it?
>> 
>> Thanks!
>> Bastiaan.
>
> That would be cmd. Not sure you can stop it without piping it 
> after rdmd to remove the \r.

Thanks. It is starting to dawn on me that I shouldn't use 
`newline` and `toFile` to write text files, but rather always use 
"\n" as line ending and use `write` for both writing to stdout 
and file.
  rdmd --eval="File(\"out.txt\", \"w\").write(\"hello\n\");"
and
  rdmd --eval="write(\"hello\n\");" > out.txt
both produce "hello\r\n" on Windows.

Am I correct, or is there a more idiomatic way of writing strings 
to text files?



More information about the Digitalmars-d-learn mailing list