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