% File src/library/base/man/writeLines.Rd
% Part of the R package, https://www.R-project.org
% Copyright 1995-2021 R Core Team
% Distributed under GPL 2 or later

\name{writeLines}
\alias{writeLines}
\title{Write Lines to a Connection}
\description{
  Write text lines to a connection.
}
\usage{
writeLines(text, con = stdout(), sep = "\n", useBytes = FALSE)
}
\arguments{
  \item{text}{A character vector}
  \item{con}{A \link{connection} object or a character string.}
  \item{sep}{character string.  A string to be written to the connection
    after each line of text.}
  \item{useBytes}{logical.  See \sQuote{Details}.}
}
\details{
  If the \code{con} is a character string, the function calls
  \code{\link{file}} to obtain a file connection which is opened for
  the duration of the function call.
  (\link{tilde expansion} of the file path is done by \code{file}.)

  If the connection is open it is written from its current position.
  If it is not open, it is opened for the duration of the call in
  \code{"wt"} mode and then closed again.

  Normally \code{writeLines} is used with a text-mode  connection, and the
  default separator is converted to the normal separator for that
  platform (LF on Unix/Linux, CRLF on Windows).  For more control, open
  a binary connection and specify the precise value you want written to
  the file in \code{sep}.  For even more control, use
  \code{\link{writeChar}} on a binary connection.

  \code{useBytes} is for expert use.  Normally (when false) character
  strings with marked encodings are converted to the current encoding
  before being passed to the connection (which might do further
  re-encoding).  \code{useBytes = TRUE} suppresses the re-encoding of
  marked strings so they are passed byte-by-byte to the connection:
  this can be useful when strings have already been re-encoded by
  e.g.\sspace{}\code{\link{iconv}}.  (It is invoked automatically for strings
  with marked encoding \code{"bytes"}.)
}
\seealso{
  \code{\link{connections}}, \code{\link{writeChar}}, \code{\link{writeBin}},
  \code{\link{readLines}}, \code{\link{cat}}
}

\keyword{file}
\keyword{connection}
