uk.ac.starlink.table.formats

## Class CsvStarTable

- java.lang.Object
- - uk.ac.starlink.table.AbstractStarTable
  - - uk.ac.starlink.table.formats.StreamStarTable
    - - uk.ac.starlink.table.formats.CsvStarTable

- All Implemented Interfaces:
    java.io.Closeable, java.lang.AutoCloseable, StarTable

      public class CsvStarTable
      extends StreamStarTable

  Comma-Separated Value table. This reader tries to read data in the semi-standard CSV format. The intention is that it understands the version of that dialect spoken by MS Excel, though the documentation on which it is based was not obtained directly from MicroSoft.

  Here are the rules:

  - Each row must have the same number of comma-separated fields.
  - Whitespace (space or tab) adjacent to a comma is ignored.
  - Adjacent commas, or a comma at the start or end of a line (whitespace apart) indicates a null field.
  - Lines are terminated by any sequence of carriage-return or newline characters ('\r' or '\n') (a corollary of this is that blank lines are ignored).
  - Cells may be enclosed in double quotes; quoted values may contain linebreaks (or any other character); a double quote character within a quoted value is represented by two adjacent double quotes.
  - The first line may be a header line containing column names rather than a row of data. Exactly the same syntactic rules are followed for such a row as for data rows.
  Since:
    21 Sep 2004

- - ### Field Summary

    - ### Fields inherited from class uk.ac.starlink.table.formats.StreamStarTable

      `END`

  - ### Constructor Summary

    Constructors
    Constructor and Description
    `CsvStarTable(DataSource datsrc)` Constructor with default options.
    `CsvStarTable(DataSource datsrc, java.nio.charset.Charset encoding, java.lang.Boolean fixHasHeaderLine, int maxSample, char delimiter, RowEvaluator.Decoder<?>[] decoders)` Constructor with configuration option.

  - ### Method Summary

    All Methods Instance Methods Concrete Methods
    Modifier and Type | Method and Description
    --- | ---
    `protected java.io.BufferedReader` | `getReader()` Convenience method which returns a buffered reader based on this table's data source.
    `protected RowEvaluator.Metadata` | `obtainMetadata()` Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.
    `protected java.util.List<java.lang.String>` | `readRow(java.io.BufferedReader in)` Reads the next row of data from a given stream.

    - ### Methods inherited from class uk.ac.starlink.table.formats.StreamStarTable

      `getColumnCount, getColumnInfo, getRowCount, getRowSequence, init`

    - ### Methods inherited from class uk.ac.starlink.table.AbstractStarTable

      `checkedLongToInt, close, getCell, getColumnAuxDataInfos, getName, getParameters, getRow, getRowAccess, getRowSplittable, getURL, isRandom, setName, setParameters, setURL`

    - ### Methods inherited from class java.lang.Object

      `clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait`

    - ### Methods inherited from interface uk.ac.starlink.table.StarTable

      `getParameterByName, setParameter`

- - ### Constructor Detail

    - #### CsvStarTable

          public CsvStarTable(DataSource datsrc)
                       throws TableFormatException,
                              java.io.IOException

      Constructor with default options.
      Parameters:
        `datsrc` - data source
      Throws:
        `TableFormatException`
        `java.io.IOException`

    - #### CsvStarTable

          public CsvStarTable(DataSource datsrc,
                              java.nio.charset.Charset encoding,
                              java.lang.Boolean fixHasHeaderLine,
                              int maxSample,
                              char delimiter,
                              RowEvaluator.Decoder<?>[] decoders)
                       throws TableFormatException,
                              java.io.IOException

      Constructor with configuration option.
      Parameters:
        `datsrc` - data source
        `encoding` - character encoding
        `fixHasHeaderLine` - indicates whether initial line is known to be column names: yes, no or auto-determine
        `maxSample` - maximum number of rows sampled to determine column data types; if <=0, all rows are sampled
        `decoders` - permitted data type decoders
        `delimiter` - field delimiter character
      Throws:
        `TableFormatException`
        `java.io.IOException`

  - ### Method Detail

    - #### getReader

          protected java.io.BufferedReader getReader()
                                              throws java.io.IOException

      Description copied from class: `StreamStarTable`
      Convenience method which returns a buffered reader based on this table's data source.
      Overrides:
        `getReader` in class `StreamStarTable`
      Returns:
        input stream containing source data
      Throws:
        `java.io.IOException`

    - #### obtainMetadata

          protected RowEvaluator.Metadata obtainMetadata()
                                                  throws TableFormatException,
                                                         java.io.IOException

      Description copied from class: `StreamStarTable`
      Obtains column metadata for this table, probably by reading through the rows once and using a RowEvaluator.
      Specified by:
        `obtainMetadata` in class `StreamStarTable`
      Returns:
        information about the table represented by the character stream
      Throws:
        `TableFormatException` - if the data doesn't represent this kind of table
        `java.io.IOException` - if I/O error is encountered

    - #### readRow

          protected java.util.List<java.lang.String> readRow(java.io.BufferedReader in)
                                                      throws java.io.IOException

      Reads the next row of data from a given stream. Ignorable rows are skipped; comments may be stashed away.
      Specified by:
        `readRow` in class `StreamStarTable`
      Parameters:
        `in` - input stream
      Returns:
        list of Strings one for each cell in the row, or `null` for end of stream
      Throws:
        `TableFormatException` - if the data doesn't represent this kind of table
        `java.io.IOException` - if I/O error is encountered