On Monday, October 5, 2015 at 1:07:31 AM UTC+2, Josh English wrote: > I am trying to learn Racket by creating a Todo manager based on the Todo.txt > format by Gina Trapani (http://todotxt.com/) > > I also have an Android tablet that uses a todo.txt application. This > application uses "\n\r" at the end of each line. I'm on Windows 7, so I need > this newline to work as well, because if I open the file up in Notepad, it > messes up my lines and my todos (normally one per line) become one multi-line > todo. > > The program reads the text file using file->lines and filters any blank lines. > > The program writes the text file and I manually write the "\n\r" using write, > display, and print. That is to say, I've tried all three and ended up with > extra "\n" characters. > > Here is a snippet from my do-task procedure: > > (with-output-to-file (task-file-path) #:mode 'text #:exists 'truncate/replace > (lambda () > (write (string-join (drop-right uptos 1) "\n\r")) > (write "\n\r") > (write (complete-task (last uptos) (rest taskstuff))) > (write "\n\r") > (write (string-join afters "\n\r"))))) > > When I open the file with SciTe, it shows the CR and LF characters at the end > of each line, plus a blank line with a CR character. > > The complite-task procedure transforms a task and returns a trimmed string. > > Where is this extra blank line coming from? > > Full draft code at http://pastebin.com/z3C5BQJP > > Thanks, > > Josh
It's from #:mode 'text, that translates \n to \r\n: this way, programs can end the line with \n on all platforms, yet produce the right end-of-line on Windows. This behavior is copied from the C libraries. BTW, are you sure you want \n\r? That means LF CR, while on Windows you want \r\n. To sum up: You can either use #:mode 'text and just use \n (which will produce native end-of-lines, hence will produce the format you want only on Windows) *or* specify #:mode 'binary and use \r\n (not \n\r), which will produce the same result on whatever platform. Sources: 1. Following with-output-to-file docs shows that open-output-file http://docs.racket-lang.org/reference/file-ports.html?q=open-output-file%09#%28def._%28%28lib._racket%2Fprivate%2Fbase..rkt%29._open-output-file%29%29 2. For background on escape sequences and behavior on Windows, one starting point is here: https://en.wikipedia.org/wiki/Escape_sequences_in_C#Table_of_escape_sequences For the equivalent of the behavior above, see docs for fopen on Windows, in particular text and binary modes. Cheers, Paolo -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. For more options, visit https://groups.google.com/d/optout.

