FC2ブログ
CSVから数値データを読み込みたい! ~C++編~

CSVこんにちは!最近CSVファイルをいじることの多い管理人です。皆さんもCSVファイルからデータを読みだして、プログラムで使いたい!ということがあると思います。今回はC++でCSVファイルからテキストを読みだして数値として計算で使う方法についてご紹介したいと思います。

ソースコード

何はともあれ、ソースコードを見てください。


#include <string>
//stringstream を使うためにインポート

#include <sstream>
//ifstreamを使うためにインポート

#include <fstream>
using namespace std;
int main(int argc,char *argv[])

{

string str;

stringstream ss;

//以下のifstreamによって、csvFileNameに指定されたファイルが開かれます。

//今回は5行5列の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

*/

ifstream csvFile(csvFileName);

//以下の配列に5行5列のCSVファイルの数値データを格納します。

double csvData[25];

//5行分の読み出し。

for (int row = 0; row < 5; row++)

{

//4列分読み出し。

for (int col = 0; i < 4; col++)

{

//gelineの第1引数は読み出し開始位置を表します。

//以下のコードの第1引数は現在の読み出し位置を表します。

//第2引数は読み出し先を指定します。

//第3引数は終端とする文字を指定します。

getline(csvFile.seekg(0,ios_base::cur),str,',');

//stringstreamに読みだしたstringを流す。

ss.str(str);

//stringstreamから配列に流す。

//この時にstring型からdouble型の変換が暗黙的に行われる。

ss>>csvData[5*row+col];

//stringstreamを以下の2行のコードでクリアする。

//これを行わないと前の文字が残って想定通りの数値が配列に格納できない。

ss.str("");

ss.clear(stringstream::goodbit);

}

//改行コードまで読み込む。すなわち一番最後の列の数値を読み込む。

getline(csvFile.seekg(0,ios_base::cur),str,'\r');

ss.str(str);

ss>>csvData[5*row+4];

ss.str("");

ss.clear(stringstream::goodbit);

}

//CSVファイルを閉じてファイルへのアクセス権を開放する。

csvFile.close();

}

以上のコードでCSVファイル内のデータ(今回は25個)が先頭から順番にdouble型の1次元配列に読み込まれました!これでプログラム内でCSVファイルの数値データを自由に使えます。

今回のCSVファイルからのデータの読み出しのポイントはgetline関数による読み出し位置合わせです。


getline(csvFile.seekg(0,ios_base::cur),str,',');

及び


getline(csvFile.seekg(0,ios_base::cur),str,'\r');

とfor文等を組み合わせることによって読み出し開始位置を自由に移動出来ます。イメージとしてはテキストエディタでCSVファイルを開いて、矢印キーでカーソルの位置を変えるようなカンジです。

こんなカンジで簡単にCSVファイルをC++で読み出せるので、是非試してみてください!

スポンサーサイト



[2014/03/13 20:35] | プログラミング全般 | トラックバック(0) | コメント(0) | page top
<<Windows8.1 explorer.exe クラッシュ! | ホーム | スマホでコーディング!>>
コメント
コメントの投稿














管理者にだけ表示を許可する

トラックバック
トラックバック URL
http://infotech776.blog.fc2.com/tb.php/46-d0f938f6
この記事にトラックバックする(FC2ブログユーザー)
| ホーム |