+++ /dev/null
-package jp.co.areaweb.tools.csv;\r
-import java.util.*;\r
-\r
-/**\r
- * CSVファイルの1行分のレコードを表す.<br>\r
- * 1行は、Stringオブジェクトのコレクションとして表現する.<br>\r
- * このクラスは通常,CsvFileクラスとセットで利用します.<br>\r
- * 利用方法につては、CsvFileクラスのコメントを参照してください。<br>\r
- *\r
- * @author y_hayashi\r
- * @version v2.17 2010/01/24\r
- * @see jp.co.areaweb.tools.csv.CsvFile\r
- * @since 2005/06/01\r
- */\r
-@SuppressWarnings("serial")\r
-public class CsvRecord extends LinkedList<String>\r
-{\r
- /**\r
- * lineで示された文字列を、CSVレコードとして構文解析を行い、自身に取り込む.\r
- * 取り込まれたセル文字列は、自信(LinkedList)のアイテムとして格納されます.\r
- * 格納順序は、左から順に格納される.\r
- * v2.17-2010/01/24より、ダブルクォーテーションで囲まれたセルを処理できるように変更しました。\r
- * 自信のアイテムとして格納するときに、前後のダブルクォーテーションは削除されます。\r
- * \r
- * @param line CSVレコード解析を行う文字列行(つまり、CSVの1ライン)\r
- */\r
- public void analizeRecord(String line) {\r
- this.analizeRecord(line, null);\r
- }\r
-\r
- /**\r
- * lineで示された文字列を、CSVレコードとして構文解析を行い、自身に取り込む.\r
- * 取り込まれたセル文字列は、自信(LinkedList)のアイテムとして格納されます.\r
- * 格納順序は、左から順に格納される.\r
- * v2.17-2010/01/24より、ダブルクォーテーションで囲まれたセルを処理できるように変更しました。\r
- * 自信のアイテムとして格納するときに、前後のダブルクォーテーションは削除されます。\r
- * \r
- * @param line CSVレコード解析を行う文字列行(つまり、CSVの1ライン)\r
- * @param split 区切り記号。nullの時は「カンマ(,)」が使われる。\r
- */\r
- public void analizeRecord(String line, String split) {\r
- this.clear();\r
- if (split == null) {\r
- split = ",";\r
- }\r
- boolean append = false;\r
- boolean sss = false; // ダブルクォーテーション内かどうか\r
- StringBuffer sbuf = null;\r
- for (StringTokenizer st = new StringTokenizer(line, split + "\"", true); st.hasMoreTokens(); ) {\r
- String token = st.nextToken();\r
- if (token.equals("\"")) {\r
- if (sss) {\r
- // ダブルクォーテーションEND\r
- this.add(sbuf.toString());\r
- append = true;\r
- sss = false;\r
- }\r
- else {\r
- // ダブルクォーテーションSTART\r
- sbuf = new StringBuffer("");\r
- sss = true;\r
- }\r
- }\r
- else if (token.equals(split)) {\r
- if (sss) {\r
- sbuf.append(token);\r
- }\r
- else {\r
- if (append == false) {\r
- this.add("");\r
- }\r
- append = false;\r
- }\r
- }\r
- else {\r
- if (sss) {\r
- sbuf.append(token);\r
- }\r
- else {\r
- this.add(token.trim());\r
- append = true;\r
- }\r
- }\r
- }\r
- if (append == false) {\r
- this.add("");\r
- }\r
- }\r
- \r
- /**\r
- * レコードの内容をCSV形式の文字列にして返す.\r
- * 各項目はダブルクォーテーション(")で囲まれます。\r
- * 各項目間は、カンマ(,)で区切られます。\r
- * \r
- * @return このオブジェクトをCSVの1ライン形式として返します。\r
- */\r
- public String toString() {\r
- return this.toString(null);\r
- }\r
-\r
- /**\r
- * レコードの内容をCSV形式の文字列にして返す.\r
- * 各項目はダブルクォーテーション(")で囲まれます。\r
- * \r
- * @param split 区切り記号。nullの時は「カンマ(,)」が使われる。\r
- * @return このオブジェクトをCSVの1ライン形式として返します。\r
- */\r
- public String toString(String split) {\r
- StringBuffer ret = new StringBuffer();\r
- boolean top = true;\r
- for (String col : this) {\r
- if (top) {\r
- top = false;\r
- }\r
- else {\r
- ret.append(",");\r
- }\r
- ret.append("\""+ col +"\"");\r
- }\r
- return ret.toString();\r
- }\r
-}\r