Apache Commons CSV – 独自の区切り文字で保存されたCSVファイルの内容を分割するには
独自の区切り文字で保存されたCSVファイルの内容を分割するには
CSVStrategyクラスのコンストラクタの第1引数に独自の区切り文字を指定します。
package net.tk_factory.sample.apache.commons.csv; import java.io.IOException; import java.io.Reader; import java.io.StringReader; import net.tk_factory.sample.AbstractSample; import org.apache.commons.csv.CSVParser; import org.apache.commons.csv.CSVStrategy; import org.apache.log4j.Logger; /** * Apache Commons CSVを使用したサンプルプログラムです。<br/> * <br/> * <b>内容</b> * <ol type="1"> * <li>複数行のデータをセミコロン区切りで分割し、2次元配列に変換します。</li> * </ol> * @author Takafumi Kondo (TK Factory) */ public class SampleParseCSVBySemiColonStrategy extends AbstractSample { /** クラス名 */ private static final String CLASS_NAME = SampleParseCSVBySemiColonStrategy.class.getSimpleName(); /** ロガー */ private static final Logger LOGGER = Logger.getLogger(SampleParseCSVBySemiColonStrategy.class.getName()); /** * SampleParseCSVBySemiColonStrategyオブジェクトを構築すると、 * UnsupportedOperationExceptionがスローされます。<br/> */ protected SampleParseCSVBySemiColonStrategy() { throw new UnsupportedOperationException(); } /** * mainメソッドです。<br/> * * @param args 引数 */ public static void main(String[] args) { LOGGER.info("[START]" + CLASS_NAME); try { StringBuffer lines = new StringBuffer(); // 1行目 // 通常のカラム[abc] lines.append("abc;"); // 日本語を含むカラム[あいうえお] lines.append("#あいうえお#;"); // カンマを含むカラム[a,b,c] lines.append("#a,b,c#;"); // #を含むカラム[a#b#c] lines.append("#a##b##c#;"); // 空のカラム[] lines.append(""); lines.append("\n"); // 2行目 // 通常のカラム[abc] lines.append("abc;"); // 日本語を含むカラム[あいうえお] lines.append("#あいうえお#;"); // カンマを含むカラム[a,b,c] lines.append("#a,b,c#;"); // #を含むカラム[a#b#c] lines.append("#a##b##c#;"); // 空のカラム[] lines.append(""); lines.append("\n"); Reader reader = new StringReader(lines.toString()); // セミコロン区切りで分割する CSVStrategy strategy = new CSVStrategy( // 区切り文字 ';', // 括り文字 '#', // コメント識別文字 CSVStrategy.COMMENTS_DISABLED); CSVParser parser = new CSVParser(reader, strategy); String[][] data = parser.getAllValues(); for (int i = 0; i < data.length; i++) { for (int j = 0; j < data[i].length; j++) { LOGGER.debug("value[" + i + "][" + j + "]=" + data[i][j]); } } } catch (IOException ex) { LOGGER.error(getStackTrace(ex)); } finally { LOGGER.info("[E N D]" + CLASS_NAME); } } }
実行結果は以下の通りです。
2009/11/26 [ INFO]:[START]SampleParseCSVBySemiColonStrategy 2009/11/26 [DEBUG]:value[0][0]=abc 2009/11/26 [DEBUG]:value[0][1]=あいうえお 2009/11/26 [DEBUG]:value[0][2]=a,b,c 2009/11/26 [DEBUG]:value[0][3]=a#b#c 2009/11/26 [DEBUG]:value[0][4]= 2009/11/26 [DEBUG]:value[1][0]=abc 2009/11/26 [DEBUG]:value[1][1]=あいうえお 2009/11/26 [DEBUG]:value[1][2]=a,b,c 2009/11/26 [DEBUG]:value[1][3]=a#b#c 2009/11/26 [DEBUG]:value[1][4]= 2009/11/26 [ INFO]:[E N D]SampleParseCSVBySemiColonStrategy
関連記事
コメント 0