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 追加
空の要素がある(カンマが複数続く)場合、空の要素が無視される問題を発見。(^^; 赤字が修正部分。