ネタ元 →
JAVAでCSV読み込み
CSVファイルとして
testd,10,20,30,40,50
test1,60,70,80,90,100
test2,110,120,130,140,150
などがあり一番初めの列と与えられた引数と一致するキーの行を取得しして、Listに格納したいです。
たとえば与えられた引数がtest1だとしたら
Listに60,70,80,90,100をaddしたいんです。
更に機能として与えられた引数がtest3とかで
CSVファイルに存在しない場合はtestdという行を
Listに10,20,30,40,50をaddできたらと考えております。
ふむ。
import java.io.*;
import java.util.*;
public class foo {
public static void main(String[] args) throws Exception {
FileInputStream fistream = new FileInputStream("trial.csv");
InputStreamReader sreader = new InputStreamReader(fistream);
BufferedReader reader = new BufferedReader(sreader);
String line;
String target = "test1";
boolean found = false;
List<Integer> default_result = new ArrayList<Integer>();
List<Integer> result = new ArrayList<Integer>();
while ( (line = reader.readLine()) != null ) {
StringTokenizer tokenizer = new StringTokenizer(line,",");
if ( tokenizer.hasMoreTokens() ) {
String key = tokenizer.nextToken();
if ( key.equals("testd") ) {
while ( tokenizer.hasMoreTokens() ) {
default_result.add(Integer.parseInt(tokenizer.nextToken()));
}
}
else if ( key.equals(target) ) {
found = true;
while ( tokenizer.hasMoreTokens() ) {
result.add(Integer.parseInt(tokenizer.nextToken()));
}
}
}
}
reader.close();
if ( !found ) result = default_result;
for ( int n : result ) {
System.out.println(n);
}
}
}
テキストファイルの読み込み / 文字列のカンマによる分割 / 数字→数値変換
のみっつを
組み合わせるだけなんだけども、それぞれを組み合わせるっちゅーのが
ビギナには難しいんかな。んでもそこんとこが
キモなのね。
それができんといつまでたっても犬小屋は作れても一戸建ては作れない。
どんなにデカくややこしいコードであれど、シンプルな部品の組み合わせでしかないわけで。