Class 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
    Author:
    Mark Taylor (Starlink)
    • Constructor Detail

      • CsvStarTable

        public CsvStarTable​(uk.ac.starlink.util.DataSource datsrc)
                     throws TableFormatException,
                            java.io.IOException
        Constructor with default options.
        Parameters:
        datsrc - data source
        Throws:
        TableFormatException
        java.io.IOException
      • CsvStarTable

        public CsvStarTable​(uk.ac.starlink.util.DataSource datsrc,
                            java.lang.Boolean fixHasHeaderLine,
                            int maxSample)
                     throws TableFormatException,
                            java.io.IOException
        Constructor with configuration option.
        Parameters:
        datsrc - data source
        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
        Throws:
        TableFormatException
        java.io.IOException
    • Method Detail

      • getInputStream

        protected java.io.PushbackInputStream getInputStream()
                                                      throws java.io.IOException
        Description copied from class: StreamStarTable
        Convenience method which returns a buffered pushback stream based on this table's data source.
        Overrides:
        getInputStream 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.PushbackInputStream 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