プロが教えるわが家の防犯対策術!

前回の質問が説明不足だった為、こちらでもう一度詳しく補足を加え再度質問させていただきます。

↓前回の質問
http://okwave.jp/qa/q6352672.html


読み込むCSVファイルは数値のみです。

具体的な例として数値をあげさせていただきます。

例:ファイル名 test.csv

10,1.1,1.2,1.3
20,2.1,2.2,2.3
30,3.1,3.2,3.3


上記のような4列3行のCSVファイルをC言語を使用し、

10→a 1.1→b 1.2→c 1.3→d
20→e 2.1→f 2.2→g 2.3→h
30→i 3.1→j 3.2→k 3.3→l

といった具合に、任意の列・行の数字を任意の場所へ読み込みをするということが出来ません。

例をプログラムにするとどのようになるのか教えていただきたいです。

よろしくお願いします。

A 回答 (3件)

~禁じ手~


カンマで区切られたtes.csvをちょっと加工してしまいます。
加工してもcsvファイルとして問題はありません。

test.csvファイルを任意のエディタで開いて、
カンマ','をスペース' 'に置換してしまえば、プログラムを書くときに、
カンマを気にせずに、読み取ることが出来ます。
windows付属のNotePadとかWordPadだと、Ctrl + h で置換することが出来ます。

カンマで区切られていないと、
ifstreamでファイルストリームを定義して、何も気にせず読むことが出来ます。

  ifstream fin("($ファイル名)", ($読み込みモード));
    fin >> a >> b >> c >> d;
    fin >> e >> f >> g >> h;
    fin >> i >> j >> k >> l;
  fin.close();

という具合です。
    • good
    • 0

前回はちょっと間違えました。


これでどうでしょう。

char buf[1024];
double a,b,c,d;
double e,f,g,h;
double i,j,k,l;

fgets(buf,1024,fp);
sscanf("%lf , %lf , %lf , %lf",&a,&b,&c,&d);
fgets(buf,1024,fp);
sscanf("%lf , %lf , %lf , %lf",&e,&f,&g,&h);
fgets(buf,1024,fp);
sscanf("%lf , %lf , %lf , %lf",&i,&j,&k,&l);
    • good
    • 0

「scanf系は使用しない」が推奨されていますが、最も簡単に読み込むなら


 
int a,e,i;
float b,c,d,f,g,h,j,k,l;
FILE *fp;
fp = fopen("test.csv","rt");
fscanf(fp,"%d,%f,%f,%f\n",&a,&b,&c,&d);
fscanf(fp,"%d,%f,%f,%f\n",&e,&f,&g,&h);
fscanf(fp,"%d,%f,%f,%f\n",&i,&j,&k,&l);
fclose(fp);
 
でOK。
 
なお、上記プログラムは「行数と項目数が固定で、実用にならないほど粗悪なプログラム」なので、実用にするには大変な作業と変更が必要です。
 
1行の項目数が不定な場合は「1項目だけ読んで、次にどんな文字が現われるか?カンマか?改行か?その他の文字か?」って感じで、動的に処理しなければなりません(そしてそれは、ここでは回答不能なくらいの非常に複雑なプログラムになります)
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!