- PR -

CSVデータの分割について

1
投稿者投稿内容
Nana
会議室デビュー日: 2008/07/07
投稿数: 10
投稿日時: 2008-07-07 19:57
現在JAVAの学習でCSVファイルを読み込んで、そのデータを
DB登録しようと考えております。

当初CSVデータなのでsplitを使用して「,」で分割しようと考えて
いたのですが、一点困った点が出てしまったので相談させてください。

CSVデータの内容が「XXX,XXX,"XX,XX",XXX」(Xは任意の記号を含む値です)
となってしまっているため正しく分割できません。
(「"」で括られた内容はひとつのデータです)
これを解決するために参考になるリンク先などありましたら教えて頂ければと思います。
かつのり
ぬし
会議室デビュー日: 2004/03/18
投稿数: 2015
お住まい・勤務地: 札幌
投稿日時: 2008-07-07 22:45
RFCに準拠したCSV形式はダブルクォーテーションで囲まれていれば、
改行も含んでもよいことになっています。

なのでCSVをまともにパースしようと思うと、かなり面倒です。
オートマトン、構文解析等でググると色々出てきます。

勉強としてはCSVのパースが目的ですか?
CSVを単に読み取って、DBや画面周りの勉強が目的ですか?
後者が目的であれば、Commons CSVなど・・・色々とパーサがありますので、
それを使うのもありかなと思います。
Nana
会議室デビュー日: 2008/07/07
投稿数: 10
投稿日時: 2008-07-08 00:11
かつのり様

ありがとうございます。お陰様で無事解決しました。
私の学習目的はJDBC及びファイル操作だったため、Commons CSVを
利用して行いました。

外部Jarの使用は初めてだったため、ちょっと苦戦しましたがなんとか
解決でき、これもまたいい勉強になりました。
また何か不明点があった際にはよろしくご指導願います。

<参考>
import java.io.BufferedReader;
import java.io.FileReader;
import java.io.IOException;

import org.apache.commons.csv.CSVParser;

public class TestCsv {
public static void main(String args[]){
BufferedReader buffe = null;
try {
buffe = new BufferedReader(new FileReader("C:\\temp\\test.csv"));
CSVParser csv = new CSVParser(buffe);
String[] line;
while ((line = csv.getLine()) != null) {
for(int i=0;i<line.length;i++){
System.out.println(line[i]);
}
}
}catch(Exception e){
e.printStackTrace();
} finally {
try {
buffe.close();
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
1

スキルアップ/キャリアアップ(JOB@IT)