パンケーキ日記

ふらっと思ったことや備忘録などパンケーキに全く関係ないことをつぶやく

※ パンケーキの情報はありません

C++で読み込んだcsvファイルの値を配列に書き込む

C++でファイル読み込みを行う方法は色々あるようですが、以下のサイトを参考にしてコードを書きました。*1
d.hatena.ne.jp

まず読み込むcsvファイルを用意します。今回は以下のような "sample.csv" を用意しました。

f:id:halltan:20171024000948p:plain


実行するC++のコードは以下のようになります。

#include<iostream>
#include<fstream>
using namespace std;

// ファイル読み込み
// 引数で配列のポインタを受け取りそこに値を書き込み
int fileread(int test[], string fname) {
	ifstream fin(fname);
	if (!fin) {							
		cout << "ファイルをオープンできませんでした。\n";
		getchar();		
		exit(0);		// プログラムの終了
	}
	else cout << "ファイルをオープンしました。\n";

	// eofが検出されるまで配列に書き込む
	int i = 1;
	while (1) {
		fin >> test[i];
		if (fin.eof())	break;
		i++;
	}
	fin.close();
	cout << "ファイルをクローズしました。\n";

	return i;	                // 配列の長さを返す
}


int main() {
	const int num = 200;		// 配列の初期化サイズ
	int test[num];			// 配列初期化
	int flen;			// 読み込むデータサイズの変数
	string fname = "sample.csv";	// 読み込むファイル名
	flen = fileread(test, fname);	// ファイル読み込み関数実行

	// 読み込めているか確認
	for (int i = 1; i <= flen; i++) {	
		cout << test[i] << endl;
	}

	// コンソール画面が消えないように
	getchar();
	return 0;
}


これで以下のような実行結果が得られました。

f:id:halltan:20171024001945p:plain


が、なぜこのような挙動が可能なのか自分自身まだ理解できていません(なぜ配列のポインタが受け取れているのか分からない)。

勉強しなきゃ。

*1:高橋麻奈「やさしいC++」第4版, SB Creative (2013) も参考にしました