Thanks to all who have responded. My concern was to be able to write a csv file that can have line feeds in string columns chr(10). Why? Excel allows line feeds chr(10) within cells and line breaks chr(13)+chr(10) at line ending, but the windows version of R automatically replaces \n by \r\n in writing and \r\n by \n in reading (text mode).
The clues for a solution came from Brian Ripley and Thomas Lumley: we need to use "binary" connection mode (will not replace \n by \r\n) and explicit specification of line ending as "\r\n". Testing with these gave the following results: ## write.table / read.table: a bit inconsistent: need text connection to read and binary connection to write ## writeLines / readLines: readLines misses a sep= parameter to properly read in such data ## writeChar / readChar: OK Thanks again and Best regards Jens Oehlschägel ## Details filename <- "c:/tmp/c2.csv" ## write.table / read.table: a bit inconsistent: need binary connection to read and text connection to write data <- data.frame(a='c\nd', b='"äöüÄÖÜß"') # writing in text mode replaces \n by \r\n file <- file(filename, "w") write.table(data, row.names=FALSE, file=file, sep=";", qmethod="double") close(file) # writing in binary mode does not replace \n, however the real line endings are also \n instead of \r\n file <- file(filename, "wb") write.table(data, row.names=FALSE, file=file, sep=";", qmethod="double") close(file) # using the eol parameter we can create the desired csv format (which can be read by Excel file <- file(filename, "wb") write.table(data, row.names=FALSE, file=file, sep=";", qmethod="double", eol="\r\n") close(file) # for the read test write a dataset that avoids a reported bug in read.table() data <- data.frame(a=c(rep("x", 5), "c\nd"), b=c(rep("y", 5), '"äöüÄÖÜß"')) file <- file(filename, "wb") write.table(data, row.names=FALSE, file=file, sep=";", qmethod="double", eol="\r\n") close(file) # read astonishingly works on char mode connection file <- file(filename, "r") read.csv2(file) close(file) # and doesn't work on binary connection file <- file(filename, "rb") read.csv2(file) close(file) ## writeLines / readLines: readLines misses a sep= parameter to properly read in such data data <- c('a;b', 'c\nd;"äöüÄÖÜß"') # text mode substitutes \n -> \r\n like in write.table file <- file(filename, "w") writeLines(data, file, sep="\n") close(file) # we can write out the desired one using binary mode and sep="\r\n" file <- file(filename, "wb") writeLines(data, file, sep="\r\n") close(file) # However, we cannot read this in in binary mode, readLines misses a sep= parameter file <- file(filename, "rb") readLines(file) close(file) # text mode replaces as expected file <- file(filename, "r") readLines(file) close(file) ## writeChar / readChar: OK data <- c('a;b\r\nc\nd;"äöüÄÖÜß"') # writing text mode substitutes as expected file <- file(filename, "w") writeChar(data, file, eos=NULL) close(file) # writing binary mode works file <- file(filename, "wb") writeChar(data, file, eos=NULL) close(file) # reading binary mode works file <- file(filename, "rb") readChar(file, nchar(data)) close(file) # reading text mode substitutes as expected file <- file(filename, "r") readChar(file, nchar(data)) close(file) -- ______________________________________________ [EMAIL PROTECTED] mailing list https://www.stat.math.ethz.ch/mailman/listinfo/r-help