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

関連記事

  1. コメント 0

  1. トラックバック 0

return top