今回は、csvファイルからデータ入力します。 入力した行を split を使って個々のデータに分解する例です。
【 csvファイルから入力するプログラム例 】import java.io.*; class InputCsv { public static void main( String[] args ) { try { BufferedReader br = new BufferedReader( new FileReader("data.csv") ); String s; // ファイルを行単位で読む while( (s = br.readLine()) != null ) { // カンマで分割したString配列を得る String array[] = s.split( "," ); // データ数をチェックしたあと代入、プリントする if( array.length != 3 ) throw new NumberFormatException(); int shcd = Integer.parseInt( array[0] ); String name = array[1]; int price = Integer.parseInt( array[2] ); // 内容を出力する System.out.println( "|"+shcd+"|"+name+"|"+price+"|"); } br.close(); } catch( IOException e ) { System.out.println( "入出力エラーがありました" ); } catch( NumberFormatException e ) { System.out.println( "フォーマットエラーがありました" ); } } }
ファイルからの入力は、BufferedReader クラスを使っています。
readLine メソッドは1行を読み込み、改行を除いて String型で返します。その結果を保存した s について splitメソッドを呼び出し文字列を分割します。
split は指定した区切りで分割し、結果を String型の配列で返します( 文字列を分割するsplitの使用例 )。
なお、csvファイルを使うときは色々と考慮すべき点がありますが、ここでは、
「カンマの前後に空白はないものとする、カンマを含む名前はないものとする、データの個数が3を超えるものはエラー」の取り扱いとします。
1123,NOTEPC S916,59800 2005,Mouse-J01,3980 2006,MousePad-N01,500 3012,USB stick 4GB,1200このプログラムを実行すると、次のように表示されます。
|1123|NOTEPC S916|59800| |2005|Mouse-J01|3980| |2006|MousePad-N01|500| |3012|USB stick 4GB|1200|
(今回のクイズです)
次のようなデータが data.csv に入っていた場合、上のプログラムではどのように処理されるでしょうか?
(1), (2), (3) のそれぞれで考えてください。
abc,USB8GB,2500 (1) 421,, (2) 4001,USB stick 8GB,2500,5%OFF (3)(答えは、次回の Java の Tips で ・・・)
(前回 クイズはありませんでした)