01: package prefuse.data.io;
02:
03: import java.io.BufferedReader;
04: import java.io.IOException;
05: import java.io.InputStream;
06: import java.io.InputStreamReader;
07:
08: import prefuse.data.parser.DataParseException;
09: import prefuse.data.parser.ParserFactory;
10:
11: /**
12: * TableReader for delimited text files, such as tab-delimited or
13: * pipe-delimited text files. Such files typically list one row of table
14: * data per line of the file, using a designated character such as a tab
15: * (\t) or pipe (|) to demarcate different data columns. This class
16: * allows you to select any regular expression as the column
17: * delimiter.
18: *
19: * @author <a href="http://jheer.org">jeffrey heer</a>
20: */
21: public class DelimitedTextTableReader extends AbstractTextTableReader {
22:
23: private String m_delim;
24:
25: /**
26: * Create a new DelimitedTextTableReader for reading tab-delimited files
27: * using a default parser factory.
28: */
29: public DelimitedTextTableReader() {
30: this ("\t");
31: }
32:
33: /**
34: * Create a new DelimitedTextTableReader for reading tab-delimited files.
35: * @param parserFactory the ParserFactory to use for parsing text strings
36: * into table values.
37: */
38: public DelimitedTextTableReader(ParserFactory parserFactory) {
39: this ("\t", parserFactory);
40: }
41:
42: /**
43: * Create a new DelimitedTextTableReader using a default parser factory.
44: * @param delimiterRegex a regular expression string indicating the
45: * delimiter to use to separate column values
46: */
47: public DelimitedTextTableReader(String delimiterRegex) {
48: m_delim = delimiterRegex;
49: }
50:
51: /**
52: * Create a new DelimitedTextTableReader.
53: * @param delimiterRegex a regular expression string indicating the
54: * delimiter to use to separate column values
55: * @param pf the ParserFactory to use for parsing text strings
56: * into table values.
57: */
58: public DelimitedTextTableReader(String delimiterRegex,
59: ParserFactory pf) {
60: super (pf);
61: m_delim = delimiterRegex;
62: }
63:
64: // ------------------------------------------------------------------------
65:
66: /**
67: * @see prefuse.data.io.AbstractTextTableReader#read(java.io.InputStream, prefuse.data.io.TableReadListener)
68: */
69: protected void read(InputStream is, TableReadListener trl)
70: throws IOException, DataParseException {
71: String line;
72: int lineno = 0;
73:
74: BufferedReader br = new BufferedReader(
75: new InputStreamReader(is));
76: while ((line = br.readLine()) != null) {
77: // increment the line number
78: ++lineno;
79:
80: // split on tab character
81: String[] cols = line.split(m_delim);
82: for (int i = 0; i < cols.length; ++i) {
83: trl.readValue(lineno, i + 1, cols[i]);
84: }
85: }
86: }
87:
88: } // end of class DelimitedTextTableReader
|