ページ 11

CSVファイルからのfscanf_sでの読み込み

Posted: 2016年5月08日(日) 20:28
by Swarm
CSVファイルからパラメータを読んで,その値に基づいて計算を行わせようとしています.
以下のプログラムでパラメータセットを読み込めています.

コード:

	if(error = fopen_s(&param, p_fname, "r") != 0){
		printf("%sファイルが開けません\n", p_fname);
		return -1;
	}
	//parameterファイルの読み込み
	fscanf_s(param, "%[^,],%d", param_name1, _countof(param_name1), &a);
	fscanf_s(param, "%[^,],%d", param_name2, _countof(param_name2), &b);
	fscanf_s(param, "%[^,],%d", param_name3, _countof(param_name3), &c);
	fscanf_s(param, "%[^,],%d", param_name4, _countof(param_name4), &d);
	fclose(param);
追加で,別のCSVファイルからも値を読みこむ必要があり,以下のプログラムを試したところ読み込めていません.
ちなみにCSVファイルには「0.1, 0.2, 0.3, 0.4」が入っています.
(実際には1000行×4列のデータ)

コード:

	sprintf_s(str, 100, "SwarmInput_%d.csv", gen);
	if (error = fopen_s(&swarminput, str, "r") != 0) {
		printf("%sファイルが開けません\n", str);
		return -1;
	}
	fscanf_s(swarminput, "%[^,],%d,%lf,%lf,%lf,%lf", str, _countof(str), &gen, &input[0][0], &input[0][1], &input[0][2], &input[0][3]);
CSVファイルは開いていますが,データの読み込みができておらず,
gen=0,input[0][0]=0,input[0][1]=0,input[0][2]=0,input[0][3]=0になっています.

助言頂ければ幸いです.

Re: CSVファイルからのfscanf_sでの読み込み

Posted: 2016年5月08日(日) 20:42
by みけCAT
どうして4列のデータなのに6列読み込もうとしている感じのプログラムになっているのですか?

Re: CSVファイルからのfscanf_sでの読み込み

Posted: 2016年5月08日(日) 21:02
by Swarm
大変申し訳ありません.
間違いがあったので訂正致します.
○:「1, 0.1, 0.2, 0.3, 0.4」
×:「0.1, 0.2, 0.3, 0.4」

inputのCSVファイルの1列目を消して「0.1, 0.2, 0.3, 0.4」のみにして以下のプログラムに修正しました.

コード:

	fscanf_s(swarminput, "%[^,],%lf,%lf,%lf,%lf", str, _countof(str), &input[0][0], &input[0][1], &input[0][2], &input[0][3]);
	X = input[0][0];
	Y = input[0][1];
	Z = input[0][2];
	N = input[0][3];
	fclose(swarminput);
<結果>
X=0.2, Y=0.3, Z=0.4, N=0

1列目を読まずに2列目から読み込んでいるようです.

Re: CSVファイルからのfscanf_sでの読み込み

Posted: 2016年5月08日(日) 21:04
by Swarm

コード:

	fscanf_s(swarminput, "%lf,%lf,%lf,%lf", &input[0][0], &input[0][1], &input[0][2], &input[0][3]);
ご回答の意味を理解致しました.
上記の引数に修正して目的の数値を得ることができました.
有難う御座いました!!!