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