2016年1月5日火曜日

CSVファイルからデータの読込

メモ。
csvファイル( , カンマ区切り、改行あり)からデータを読み込む。
ついでにopencvのMatにデータをぶち込む。


"filename1.csv", "filename2.csv", .... , みたいな感じの連続番号を振ったCSVファイルをループ文で読み込む

while(1){
 read_csv(i);
 ++i;
}
みたいな感じ。







int read_csv(int counter) //ループのカウンター値を受け取る→連続したファイルを読み込む
{

 //ファイル名の指定
 char name[256];
 sprintf_s(name, 256, "ファイル名%d.csv", counter); //連続番号付けしたファイルを読み込む

 std::ifstream read_data(name);


 //エラー処理
 if (!read_data) {
  std::cout << "Error:Input data file not found" << std::endl;
  return -1;
 }

 double *data = new double[height*width](); //0で初期化
 //heightとwidthは定数、ここでは定義は省略している

 int i = 0;
 
 std::string str;
 while (getline(read_data, str)){
  
  string token;
  stringstream ss;
  istringstream stream(str);

  while (getline(stream, token, ',')) { // 区切り文字は ,カンマ

   // 文字列から数値に変換
   ss << token;
   ss >> data[i];
   
   ++i;

   ss.clear(); // 状態をクリア.
   ss.str(""); // 文字列をクリア.
  }
 }


 cv::Mat mat_data(height, width, CV_64FC1, data); //csvから読み込んだデータをcv::Matにぶち込む

 
 return 0;
}




インクルードするのはたしかこれら
#include <fstream>
#include <iostream>
#include <string>
#include <opencv2/opencv.hpp>

参考:
http://fa11enprince.hatenablog.com/entry/2014/04/03/233500
http://99blues.dyndns.org/blog/2010/02/std_stringstream/
http://ppp-lab.sakura.ne.jp/cpp/library/032.html
http://handasse.blogspot.com/2007/06/c_22.html




0 件のコメント:

コメントを投稿