Thinkers'Studio
JavaとC言語の自習ツール
csvファイルから入力するプログラム例

 今回は、csvファイルからデータ入力します。 入力した行を split を使って個々のデータに分解する例です。

csvファイルから入力するプログラム例 】
 商品コード、商品名、価格の3つのデータを 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( "フォーマットエラーがありました" );
        }
    }
}

csvファイルから読み込むプログラムの処理内容

 ファイルからの入力は、BufferedReader クラスを使っています。
 readLine メソッドは1行を読み込み、改行を除いて String型で返します。その結果を保存した s について splitメソッドを呼び出し文字列を分割します。 split は指定した区切りで分割し、結果を String型の配列で返します( 文字列を分割するsplitの使用例 )。
 なお、csvファイルを使うときは色々と考慮すべき点がありますが、ここでは、 「カンマの前後に空白はないものとする、カンマを含む名前はないものとする、データの個数が3を超えるものはエラー」の取り扱いとします。

 data.csv が次の場合
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 で ・・・)

前回 クイズはありませんでした)