1 package org.apache.turbine.util.parser;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.io.Reader;
23 import java.io.StreamTokenizer;
24 import java.util.List;
25
26 /***
27 * CSVParser is used to parse a stream with comma-separated values and
28 * generate ParameterParser objects which can be used to
29 * extract the values in the desired type.
30 *
31 * <p>The class extends the abstract class DataStreamParser and implements
32 * initTokenizer with suitable values for CSV files to provide this
33 * functionality.
34 *
35 * <p>The class (indirectly through DataStreamParser) implements the
36 * java.util.Iterator interface for convenience.
37 * This allows simple use in a Velocity template for example:
38 *
39 * <pre>
40 * #foreach ($row in $csvfile)
41 * Name: $row.Name
42 * Description: $row.Description
43 * #end
44 * </pre>
45 *
46 * @author <a href="mailto:sean@informage.net">Sean Legassick</a>
47 * @author <a href="mailto:martin@mvdb.net">Martin van den Bemt</a>
48 * @author <a href="mailto:hps@intermeta.de">Henning P. Schmiedehausen</a>
49 * @version $Id: CSVParser.java 534527 2007-05-02 16:10:59Z tv $
50 */
51 public class CSVParser extends DataStreamParser
52 {
53 /***
54 * Create a new CSVParser instance. Requires a Reader to read the
55 * comma-separated values from. The column headers must be set
56 * independently either explicitly, or by reading the first line
57 * of the CSV values.
58 *
59 * @param in the input reader.
60 */
61 public CSVParser(Reader in)
62 {
63 super(in, null, null);
64 }
65
66 /***
67 * Create a new CSVParser instance. Requires a Reader to read the
68 * comma-separated values from, and a list of column names.
69 *
70 * @param in the input reader.
71 * @param columnNames a list of column names.
72 */
73 public CSVParser(Reader in, List columnNames)
74 {
75 super(in, columnNames, null);
76 }
77
78 /***
79 * Create a new CSVParser instance. Requires a Reader to read the
80 * comma-separated values from, a list of column names and a
81 * character encoding.
82 *
83 * @param in the input reader.
84 * @param columnNames a list of column names.
85 * @param characterEncoding the character encoding of the input.
86 */
87 public CSVParser(Reader in, List columnNames, String characterEncoding)
88 {
89 super(in, columnNames, characterEncoding);
90 }
91
92 /***
93 * Initialize the StreamTokenizer instance used to read the lines
94 * from the input reader.
95 * It is now only needed to set the fieldSeparator
96 */
97 protected void initTokenizer(StreamTokenizer tokenizer)
98 {
99
100 super.initTokenizer(tokenizer);
101
102 super.setFieldSeparator(',');
103
104 }
105 }