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

\name{read.fortran}
\alias{read.fortran}
\title{Read Fixed-Format Data in a Fortran-like Style}
\description{
  Read fixed-format data files using Fortran-style format specifications.
}
\usage{
read.fortran(file, format, ..., as.is = TRUE, colClasses = NA)
}
\arguments{
  \item{file}{File or \link{connection} to read from.}
  \item{format}{Character vector or list of vectors.  See
    \sQuote{Details} below.}
  \item{\dots}{Other arguments for \code{\link{read.fwf}}.}
  \item{as.is}{Keep characters as characters?}
  \item{colClasses}{Variable classes to override defaults. See
    \code{\link{read.table}} for details.}
}
\details{
  The format for a field is of one of the following forms: \code{rFl.d},
  \code{rDl.d}, \code{rXl}, \code{rAl}, \code{rIl}, where \code{l} is
  the number of columns, \code{d} is the number of decimal places, and
  \code{r} is the number of repeats. \code{F} and \code{D} are numeric
  formats, \code{A} is character, \code{I} is integer, and \code{X}
  indicates columns to be skipped. The repeat code \code{r} and decimal
  place code \code{d} are always optional. The length code \code{l} is
  required except for \code{X} formats when \code{r} is present.

  For a single-line record, \code{format} should be a character
  vector. For a multiline record it should be a list with a character
  vector for each line.

  Skipped (\code{X}) columns are not passed to \code{read.fwf}, so
  \code{colClasses}, \code{col.names}, and similar arguments passed to
  \code{read.fwf} should not reference these columns.
}
\note{
  \code{read.fortran} does not use actual Fortran input routines, so
  the formats are at best rough approximations to the Fortran ones.
  In particular, specifying \code{d > 0} in the \code{F} or \code{D}
  format will shift the decimal \code{d} places to the left, even if
  it is explicitly specified in the input file.
}
\value{
  A data frame
}

\seealso{\code{\link{read.fwf}}, \code{\link{read.table}}, \code{\link{read.csv}}}
\examples{
ff <- tempfile()
cat(file = ff, "123456", "987654", sep = "\n")
read.fortran(ff, c("F2.1","F2.0","I2"))
read.fortran(ff, c("2F1.0","2X","2A1"))
unlink(ff)
cat(file = ff, "123456AB", "987654CD", sep = "\n")
read.fortran(ff, list(c("2F3.1","A2"), c("3I2","2X")))
unlink(ff)
# Note that the first number is read differently than Fortran would
# read it:
cat(file = ff, "12.3456", "1234567", sep = "\n")
read.fortran(ff, "F7.4")
unlink(ff)
}
\keyword{file}
\keyword{connection}
