workshop/of/csv

OFからCSV形式への書き出し

センサデータ等をOFで取得し,それを実験データとしてCSV形式に書き出す為の情報をまとめます.

CSV形式

CSV形式とは,カンマ区切り等のテキスト形式にて保存されたファイル形式です.エクセルファイルを手動で作成したい場合,エクセルデータをつくろうとするのではなく,このCSV形式で書き出し,エクセル等の表計算ソフトでグラフ,解析を行うのが一般的です.ではまずCSV形式のファイルを実際に作ってみます.下記の手順に従ってください.

  1. テキストエディットを立ち上げ,新規書類をクリック
  2. ファイル内に下記をコピーアンドペースト
    a,b,c,d,e
    1,2,3,4,5
  3. ファイルをtest.txtとして保存して閉じる
  4. ファイル拡張子を .txt から .csvへ変更
  5. エクセル等の表計算ソフトで test.csv を開く

以上で作成したcsvファイルが確認できたと思います.このようにカンマ区切りでファイルを作成するだけで,表計算ソフトで読み取り可能な形式に簡単に保存できます.

OFでCSV形式を書き出す

では実際にプログラム上(OF)からCSVを書き出してみます.例えば加速度センサ(x,y,z)のそれぞれの値をCSVへ書き出すことを考えてみます.それぞれの値は vector形式にてx,y,zが宣言され,値が格納されているとします.ファイルへの書き出しには ofBufferToFile という関数を利用します.まずはOFで空のプロジェクトファイルを作成し,void ofApp::keyPressed(int key);関数を下記の記述にしてください.実際に実行し,'s'キーを押すと,dataフォルダの中にdata.csvというファイルが保存されており,順に1,2,3,4,5というデータが確認出来るかと思います.

void ofApp::keyPressed(int key){
  if( key == 's' ){
    ofBuffer ofbuf;
    string str;
     vector<int>x;
    x.push_back(1);
    x.push_back(2);
    x.push_back(3);
    x.push_back(4);
    x.push_back(5);

    for( int i = 0; i < x.size(); i++ ){
      str = str + ofToString(x[i]) + "\r\n"; // \r\nは改行コード
    }

    ofbuf.append(str);
    ofBufferToFile(ofToDataPath("data.csv"), ofbuf);
  }

}


Copyright (c) 2015 Tetsuaki BABA all rights reserved.