csvファイルからの入力は、以前の Tips で紹介しました。今回は、データを csv形式でファイル出力する例です。
それだけでは面白くないので、csvファイルから入力し、指定した条件に合致するデータを抽出して別の csvファイルに出力する例とします。
(例) コマンドラインに "125 201402" と指定したとき
店舗コード125 の 2014年2月の売上データが "125_201402.csv" ファイルに出力されます。
sales.csv
110,20140201,256000 110,20140202,273450 : 125,20140201,153000 125,20140202,196400 : 125,20140228,143550 |
====> |
抽出結果の 125_201402.csv
01,153000
02,196400
:
28,143550
|
import java.io.*; class SalesData { public static void main( String[] args ) { if( args.length != 2 || args[1].length() != 6 ) { System.out.println( "店舗コード 年月(YYYYMM)を指定してください" ); return; } try { String outcsv = args[0]+"_"+args[1]+".csv"; BufferedReader br = new BufferedReader( new FileReader("sales.csv") ); BufferedWriter bw = new BufferedWriter( new FileWriter(outcsv) ); String s; int cnt = 0; //行単位で読む while( (s = br.readLine()) != null ) { String array[] = s.split( "," ); //カンマで分割 if( array.length != 3 ) throw new IOException( "csv列数に問題(出力済み:"+cnt+")" ); //抽出条件に一致? (1列目は店舗コード?, 2列目の6文字はYYYYMM?) if( args[0].equals(array[0]) && args[1].equals(array[1].substring(0,6)) ) { bw.write( array[1].substring(6,8) + "," + array[2] ); bw.newLine(); cnt++; } } br.close(); bw.close(); System.out.println( outcsv + "("+cnt+"行)が出力されました" ); } catch( Exception e ) { System.out.println( e ); } } }下記は、各手順で使用したメソッドなどを整理したものです。
(今週のクイズです)
sales.csv は必ず店舗コードの昇順に並んでいるとして、全店舗コードを重複無くファイル出力するにはどうすればよいでしょう?
(答えは、次の Java の Tips で ・・・ )
[ 関連記事 ] csvファイルから入力するには, 部分文字列を返すsubstring