package prefuse.data.io;
import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import prefuse.data.parser.DataParseException;
import prefuse.data.parser.ParserFactory;
/**
* TableReader for delimited text files, such as tab-delimited or
* pipe-delimited text files. Such files typically list one row of table
* data per line of the file, using a designated character such as a tab
* (\t) or pipe (|) to demarcate different data columns. This class
* allows you to select any regular expression as the column
* delimiter.
*
* @author <a href="http://jheer.org">jeffrey heer</a>
*/
public class DelimitedTextTableReader extends AbstractTextTableReader {
private String m_delim;
/**
* Create a new DelimitedTextTableReader for reading tab-delimited files
* using a default parser factory.
*/
public DelimitedTextTableReader() {
this("\t");
}
/**
* Create a new DelimitedTextTableReader for reading tab-delimited files.
* @param parserFactory the ParserFactory to use for parsing text strings
* into table values.
*/
public DelimitedTextTableReader(ParserFactory parserFactory) {
this("\t", parserFactory);
}
/**
* Create a new DelimitedTextTableReader using a default parser factory.
* @param delimiterRegex a regular expression string indicating the
* delimiter to use to separate column values
*/
public DelimitedTextTableReader(String delimiterRegex) {
m_delim = delimiterRegex;
}
/**
* Create a new DelimitedTextTableReader.
* @param delimiterRegex a regular expression string indicating the
* delimiter to use to separate column values
* @param pf the ParserFactory to use for parsing text strings
* into table values.
*/
public DelimitedTextTableReader(String delimiterRegex, ParserFactory pf) {
super(pf);
m_delim = delimiterRegex;
}
// ------------------------------------------------------------------------
/**
* @see prefuse.data.io.AbstractTextTableReader#read(java.io.InputStream, prefuse.data.io.TableReadListener)
*/
protected void read(InputStream is, TableReadListener trl)
throws IOException, DataParseException
{
String line;
int lineno = 0;
BufferedReader br = new BufferedReader(new InputStreamReader(is));
while ( (line=br.readLine()) != null ) {
// increment the line number
++lineno;
// split on tab character
String[] cols = line.split(m_delim);
for ( int i=0; i<cols.length; ++i ) {
trl.readValue(lineno, i+1, cols[i]);
}
}
}
} // end of class DelimitedTextTableReader