Excelで出力できるファイル形式の一つにCSVファイルがあります。
このファイルはExcelの表形式のデータをカンマ区切りでテキストにしたものになります。
図)Excel編集画面
先のExcelファイルをCSVファイルに変換したものが下図になります。
図)CSVファイルの中身
このような表形式のデータを読み込んでプログラムで利用する場合には、Stringクラスのsplitメソッドが役に立ちます。
今回はCSVファイルを読み込んで、二次元配列へ表形式に格納して出力してみます。
サンプルプログラム
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 |
import java.io.BufferedReader; import java.io.FileReader; import java.io.IOException; public class DataSplit{ public static void main(String[] args){ BufferedReader br=null; int[][] map=null; // 読み込んだデータを格納する配列 int i=0,j=0; // カウンタ変数 int w=0,h=0; // 読み込むデータの列数、行数 String buf; // 一時的にここに読み込む try{ // ファイルオープン br=new BufferedReader(new FileReader("test1.csv")); i=0; // 行数 // まだ読込むデータあればファイルからデータを読込む while(br.ready()){ // ①1行分のデータを文字列として読み込む buf=br.readLine(); // ②上記をカンマで区切り配列に変換する String[] str=buf.split(",",0); j=0; // 列数 // ③カンマで区切った配列の要素分ループ for(String s:str){ // ④:ファイルの0行目の読み込みなら if(i==0){ // ファイルの0列目の読み込みなら if(j==0){ // 列数の取得 w=Integer.parseInt(s); // ファイルの1列目の読み込みなら }else{ // 行数の取得 h=Integer.parseInt(s); // 行と列が判明したので配列生成 map=new int[h][w]; } // ⑤:0行目以外ならデータ部 }else{ // 配列にデータ格納 map[i-1][j]=Integer.parseInt(s); } j++; } i++; } // ⑥:読み込んだデータ部の出力 for(i=0;i<h;i++){ for(j=0;j<w;j++){ System.out.print(map[i][j]+","); } System.out.println(); } }catch(IOException e){ e.printStackTrace(); }finally{ try{ if(br!=null){ br.close(); } }catch(IOException e){ e.printStackTrace(); } } } } |
- BufferedReaderクラスのreadLineメソッドを使用して、ファイル内の1行分のデータをbufに読み込みます。
この結果bufは、区切りのカンマを含めて”1,2,3,4,5,”という1つの文字列となります。 - bufをStringクラスのsplitメソッドを使用して、文字列内のカンマで区切った配列に変換します。
この結果、配列strには{“1″,”2″,”3″,”4″,”5”}の様なデータが格納されます。 - 列数分だけループして②のデータを二次元配列mapに格納していきます。
- 今回は二次元配列に表形式になるようにデータを格納するため、過不足無い要素数の配列が必要です。
そのためにCSVファイルの先頭行に列数と行数を記述していますので、まずそれを読み込みます。
i=0の時が先頭行の読み込みになります。j=0なら列数、j=1なら行数が得られますので、それを元に二次元配列を生成します。 - 先頭行以外はCSVファイルのデータ部となりますので、1件ずつ二次元配列mapに格納していきます。
- 最後にmapを表形式で出力しています。
図)出力結果
サンプルプログラムでは読み込みんだデータを単に出力しているのみですが、書き込みや、読み込んだデータを用いた計算や条件分岐ももちろん可能です。
今回はExcelを使ってCSVファイルを作成しましたが、テキストエディターでもCSVファイルは作成できますので試してみてください。
表形式のデータは様々な分野で利用されます。
一度、練習しておくとよいでしょう。