Apache Commons CSV – 区切り文字をタブで保存されたCSVファイルの内容を分割するには


区切り文字をタブで保存されたCSVファイルの内容を分割するには
CSVParserクラスのコンストラクタの引数にCSVStrategy.TDF_STRATEGYを指定します。

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 SampleParseCSVbyTdfStrategy extends AbstractSample
{
    /** クラス名 */
    private static final String CLASS_NAME =
        SampleParseCSVbyTdfStrategy.class.getSimpleName();

    /** ロガー */
    private static final Logger LOGGER =
        Logger.getLogger(SampleParseCSVbyTdfStrategy.class.getName());

    /**
     * SampleParseCSVbyTdfStrategyオブジェクトを構築すると、
     * UnsupportedOperationExceptionがスローされます。<br/>
     */
    protected SampleParseCSVbyTdfStrategy()
    {
        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\t");
            // 日本語を含むカラム[あいうえお]
            lines.append("\"あいうえお\"\t");
            // カンマを含むカラム[a,b,c]
            lines.append("\"a,b,c\"\t");
            // ダブルクォーテーションを含むカラム[a"b"c]
            lines.append("\"a\"\"b\"\"c\"\t");
            // 空のカラム[]
            lines.append("");
            lines.append("\n");

            // 2行目
            // 通常のカラム[abc]
            lines.append("abc\t");
            // 日本語を含むカラム[あいうえお]
            lines.append("\"あいうえお\"\t");
            // カンマを含むカラム[a,b,c]
            lines.append("\"a,b,c\"\t");
            // ダブルクォーテーションを含むカラム[a"b"c]
            lines.append("\"a\"\"b\"\"c\"\t");
            // 空のカラム[]
            lines.append("");
            lines.append("\n");

            Reader reader = new StringReader(lines.toString());

            // タブ区切りで分割する
            CSVParser parser = new CSVParser(reader, CSVStrategy.TDF_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/25 [ INFO]:[START]SampleParseCSVbyTdfStrategy
2009/11/25 [DEBUG]:value[0][0]=abc
2009/11/25 [DEBUG]:value[0][1]=あいうえお
2009/11/25 [DEBUG]:value[0][2]=a,b,c
2009/11/25 [DEBUG]:value[0][3]=a"b"c
2009/11/25 [DEBUG]:value[0][4]=
2009/11/25 [DEBUG]:value[1][0]=abc
2009/11/25 [DEBUG]:value[1][1]=あいうえお
2009/11/25 [DEBUG]:value[1][2]=a,b,c
2009/11/25 [DEBUG]:value[1][3]=a"b"c
2009/11/25 [DEBUG]:value[1][4]=
2009/11/25 [ INFO]:[E N D]SampleParseCSVbyTdfStrategy

関連記事

  1. コメント 0

  1. トラックバック 0

return top