今日の役に立たない一言 - Today’s Trifle! -

古い記事ではさまざまなテーマを書いていますが、2007年以降はプログラミング関連の話がほとんどです。

CSVParser

Webで探せばどこかに転がってるんだろうと思ったけど、こんなん作った方がはやいやん!と思って、作ってみた。
作った後でGoogleで検索したけど、なかなかヒットしなかった。結局、自分で作った方が早かった。。。

import java.io.*;
import java.util.StringTokenizer;
import java.util.Vector;

public class CSVParser {
    public static String parse(File f) throws IOException {
        Vector rows = new Vector();
        BufferedReader reader = new BufferedReader(new FileReader(f));
        while (reader.ready()) {
            String s = reader.readLine();
            if (s.length() == 0) {
                break;
            }
            StringTokenizer st = new StringTokenizer(s, ",", true);
            Vector columns = new Vector();
            int tokenCount = st.countTokens();
            String prev = "";
            //String tokens = new String[st.countTokens()];
            //for (int i = 0; i < tokens.length; i++) {
            //    tokens[i] = st.nextToken();
            //}
            for (int i = 0; i < tokenCount; i++) {
                String t = st.nextToken();
                if (t.equals(",")) {
                    if (prev.equals(",")) {
                        columns.add("");
                    }
                } else {
                    columns.add(t);
                }
                prev = t;
            }
            String tokens = new String[columns.size()];
            tokens = (String)columns.toArray(tokens);
            rows.addElement(tokens);
        }
        String result = new String[rows.size()];
        result = (String)rows.toArray(result);
        return result;
    }
}

ご自由にお使いください。
ただし、double quotation の内部をひとつのカラムとみなすような処理はないのでご注意!
とりあえず、tokens[]のある要素の先頭に「"」があったときは、最後に「"」がある要素までをくっつけてやればだいぶましになるかもね。
2004/04/02 追加
空の要素がある(カンマが複数続く)場合、空の要素が無視される問題を発見。(^^; 赤字が修正部分。