CSVを読み込んで処理することなど、原始的で近年携わったプロジェクトではなかった。
csv4j なるものを久々に使って思い出した。
http://csv4j.sourceforge.net/
CSVLineProcessor がとても便利だ。CSVLineProcessorを使うのに注意すべきは、
continueProcessing() 実装で、行の処理、ヘッダの処理=processHeaderLine()
データ行の処理=processDataLine()が実行される前に、
continueProcessing() が呼び出される。
したがって、常に false を返すと何もしてくれない。
この continueProcessing() が鬱陶しいと思っていたが、実はこれが威力を発揮ケースがある。
CSVFileProcessor fp = new CSVFileProcessor();
fp.processFile("sample.csv",new CSVLineProcessor(){
boolean b=true;
@Override
public void processHeaderLine(int linenumber,List<String> fieldNames){
for(final String headerName : fieldNames){
System.out.println("headerName=["+headerName+"]");
}
}
@Override
public void processDataLine(int linenumber,List<String> fieldValues){
System.out.println("linenumber = "+linenumber);
for(String fieldValue : fieldValues){
System.out.println("fieldValue=["+fieldValue+"]");
}
// fieldValues のある条件で、次の行から実行しないようにする
if (...){
b = false;
}
}
@Override
public boolean continueProcessing(){
return b;
}
});