|
com.Ostermiller.util Java Utilities |
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectcom.Ostermiller.util.LabeledCSVParser
public class LabeledCSVParser
Decorate a CSVParse object to provide an index of field names. Many (most?)
CSV files have a list of field names (labels) as the first line. A
LabeledCSVParser will consume this line automatically. The methods
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 Summary | |
---|---|
LabeledCSVParser(CSVParse parse)
Construct a LabeledCSVParser on a CSVParse implementation. |
Method Summary | |
---|---|
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. |
String[][] |
getAllValues()
Get all the values from the file. |
int |
getLabelIdx(String label)
Get the index of the column having the given label. |
int |
getLabelIndex(String label)
Deprecated. may swallow an IOException while reading the labels - please use getLabelIdx() |
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. |
String[] |
getLine()
Get all the values from a line. |
String |
getValueByLabel(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. |
String |
nextValue()
Read the next value from the file. |
Methods inherited from class java.lang.Object |
---|
equals, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public LabeledCSVParser(CSVParse parse) throws IOException
parse
- CSVParse implementation
IOException
- if an error occurs while reading.Method Detail |
---|
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 String[][] getAllValues() throws 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
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 String[] getLine() throws 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()
.
getLine
in interface CSVParse
IOException
- if an error occurs while reading.public String nextValue() throws IOException
This method is not compatible with getValueByLabel(). Using this method will make getValueByLabel() throw an IllegalStateException for the rest of the line.
nextValue
in interface CSVParse
IOException
- if an error occurs while reading.public String[] getLabels() throws IOException
IOException
- if an IO error occurs@Deprecated public int getLabelIndex(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(String label) throws 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.
IOException
- if an IO error occurspublic String getValueByLabel(String label) throws IllegalStateException
label
- The field name.
IllegalStateException
- if nextValue has been called as part of getting the last line. nextValue is not compatible with this method.public void close() throws IOException
close
in interface CSVParse
IOException
- if an error occurs while closing the stream.
|
com.Ostermiller.util Java Utilities |
|||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
Copyright © 2001-2012 by Stephen Ostermiller