1 package jp.co.areaweb.tools.csv;
5 * CSVファイルの1行分のレコードを表す.<br/>
6 * 1行は、Stringオブジェクトのコレクションとして表現する.<br/>
7 * このクラスは通常,CsvFileクラスとセットで利用します.<br/>
8 * 利用方法につては、CsvFileクラスのコメントを参照してください。<br/>
11 * @version v2.17 2010/01/24
12 * @see jp.co.areaweb.tools.csv.CsvFile
15 @SuppressWarnings("serial")
16 public class CsvRecord extends LinkedList<String>
19 * lineで示された文字列を、CSVレコードとして構文解析を行い、自身に取り込む.
20 * 取り込まれたセル文字列は、自信(LinkedList)のアイテムとして格納されます.
22 * v2.17-2010/01/24より、ダブルクォーテーションで囲まれたセルを処理できるように変更しました。
23 * 自信のアイテムとして格納するときに、前後のダブルクォーテーションは削除されます。
25 * @param line CSVレコード解析を行う文字列行(つまり、CSVの1ライン)
27 public void analizeRecord(String line) {
28 this.analizeRecord(line, null);
32 * lineで示された文字列を、CSVレコードとして構文解析を行い、自身に取り込む.
33 * 取り込まれたセル文字列は、自信(LinkedList)のアイテムとして格納されます.
35 * v2.17-2010/01/24より、ダブルクォーテーションで囲まれたセルを処理できるように変更しました。
36 * 自信のアイテムとして格納するときに、前後のダブルクォーテーションは削除されます。
38 * @param line CSVレコード解析を行う文字列行(つまり、CSVの1ライン)
39 * @param split 区切り記号。nullの時は「カンマ(,)」が使われる。
41 public void analizeRecord(String line, String split) {
46 boolean append = false;
47 boolean sss = false; // ダブルクォーテーション内かどうか
48 StringBuffer sbuf = null;
49 for (StringTokenizer st = new StringTokenizer(line, split + "\"", true); st.hasMoreTokens(); ) {
50 String token = st.nextToken();
51 if (token.equals("\"")) {
54 this.add(sbuf.toString());
60 sbuf = new StringBuffer("");
64 else if (token.equals(split)) {
69 if (append == false) {
80 this.add(token.trim());
85 if (append == false) {
91 * レコードの内容をCSV形式の文字列にして返す.
92 * 各項目はダブルクォーテーション(")で囲まれます。
93 * 各項目間は、カンマ(,)で区切られます。
95 * @return このオブジェクトをCSVの1ライン形式として返します。
97 public String toString() {
98 return this.toString(null);
102 * レコードの内容をCSV形式の文字列にして返す.
103 * 各項目はダブルクォーテーション(")で囲まれます。
105 * @param split 区切り記号。nullの時は「カンマ(,)」が使われる。
106 * @return このオブジェクトをCSVの1ライン形式として返します。
108 public String toString(String split) {
109 StringBuffer ret = new StringBuffer();
111 for (String col : this) {
118 ret.append("\""+ col +"\"");
120 return ret.toString();