public class LabeledCSVParser extends java.lang.Object implements CSVParse
getLabels()
, getLabelIndex(String)
and
getValueByLabel(String)
allow these labels to be discovered and
used while parsing CSV data. This class can also be used to conveniently
ignore field labels if they happen to be present in a CSV file and are not
desired.Constructor and Description |
---|
LabeledCSVParser(CSVParse parse)
Construct a LabeledCSVParser on a CSVParse implementation.
|
Modifier and Type | Method and Description |
---|---|
void |
changeDelimiter(char newDelim)
Change this parser so that it uses a new delimiter.
|
void |
changeQuote(char newQuote)
Change this parser so that it uses a new character for quoting.
|
void |
close()
Close any stream upon which this parser is based.
|
java.lang.String[][] |
getAllValues()
Get all the values from the file.
|
int |
getLabelIdx(java.lang.String label)
Get the index of the column having the given label.
|
int |
getLabelIndex(java.lang.String label)
Deprecated.
may swallow an IOException while reading the labels - please use getLabelIdx()
|
java.lang.String[] |
getLabels()
Return an array of all field names from the top
of the CSV file.
|
int |
getLastLineNumber()
Get the line number that the last token came from.
|
java.lang.String[] |
getLine()
Get all the values from a line.
|
java.lang.String |
getValueByLabel(java.lang.String label)
Given the label for the column, get the column from the last line that
was read.
|
int |
lastLineNumber()
Get the line number that the last token came from.
|
java.lang.String |
nextValue()
Read the next value from the file.
|
public LabeledCSVParser(CSVParse parse) throws java.io.IOException
parse
- CSVParse implementationjava.io.IOException
- if an error occurs while reading.public void changeDelimiter(char newDelim) throws BadDelimiterException
The initial character is a comma, the delimiter cannot be changed to a quote or other character that has special meaning in CSV.
changeDelimiter
in interface CSVParse
newDelim
- delimiter to which to switch.BadDelimiterException
- if the character cannot be used as a delimiter.public void changeQuote(char newQuote) throws BadQuoteException
The initial character is a double quote ("), the delimiter cannot be changed to a comma or other character that has special meaning in CSV.
changeQuote
in interface CSVParse
newQuote
- character to use for quoting.BadQuoteException
- if the character cannot be used as a quote.public java.lang.String[][] getAllValues() throws java.io.IOException
If the file has already been partially read, only the values that have not already been read will be included.
Each line of the file that has at least one value will be represented. Comments and empty lines are ignored.
The resulting double array may be jagged.
The last line of the values is saved and may be accessed by getValueByLabel().
getAllValues
in interface CSVParse
java.io.IOException
- if an error occurs while reading.public int getLastLineNumber()
New line breaks that occur in the middle of a token are not counted in the line number count.
The first line of labels does not count towards the line number.
getLastLineNumber
in interface CSVParse
public int lastLineNumber()
New line breaks that occur in the middle of a token are not counted in the line number count.
The first line of labels does not count towards the line number.
lastLineNumber
in interface CSVParse
public java.lang.String[] getLine() throws java.io.IOException
If the line has already been partially read, only the values that have not already been read will be included.
In addition to returning all the values from a line, LabeledCSVParser
maintains a buffer of the values. This feature allows
getValueByLabel(String)
to function. In this case
getLine()
is used simply to iterate CSV data. The iteration ends
when null is returned.
Note: The methods nextValue()
and getAllValues()
are incompatible with getValueByLabel(String)
because the former
methods cause the offset of field values to shift and corrupt the internal
buffer maintained by getLine()
.
public java.lang.String nextValue() throws java.io.IOException
This method is not compatible with getValueByLabel(). Using this method will make getValueByLabel() throw an IllegalStateException for the rest of the line.
public java.lang.String[] getLabels() throws java.io.IOException
java.io.IOException
- if an IO error occurs@Deprecated public int getLabelIndex(java.lang.String label)
getLine()
method returns an
array of field values for a single record of data. This method returns
the index of a member of that array based on the specified field name.
The first field has the index 0.label
- The field name.public int getLabelIdx(java.lang.String label) throws java.io.IOException
getLine()
method returns an
array of field values for a single record of data. This method returns
the index of a member of that array based on the specified field name.
The first field has the index 0.label
- The field name.java.io.IOException
- if an IO error occurspublic java.lang.String getValueByLabel(java.lang.String label) throws java.lang.IllegalStateException
label
- The field name.java.lang.IllegalStateException
- if nextValue has been called as part of getting the last line. nextValue is not compatible with this method.Copyright (c) 2001-2020 by Stephen Ostermiller