• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:CSVファイルの入出力と計算)

CSVファイルの入出力と計算方法 - C言語の質問

このQ&Aのポイント
  • C言語を用いてCSVファイルの入出力と計算を行いたいのですが、どうすればいいでしょうか?
  • CSVファイルの中身は6行目までは不要な文字列で、7行目以降には使いたい数値があります。数値は5桁で、データ数は約300000行から10000000行です。
  • この数値に値をかけて変換し、別のファイルとして出力したいです。変数やファイルの読み書きなど、具体的な方法が分かりません。どうすればよいでしょうか?

質問者が選んだベストアンサー

  • ベストアンサー
  • semisemi
  • ベストアンサー率72% (8/11)
回答No.1

???????の部分ですが、例えば、 char str[MAX_STR]; while (fgets(str, MAX_STR, in) != NULL) { printf("%s", str); } のようにすれば、in で開いているCSVファイルから一行ずつ読み込んだ文字列が、strに格納されて表示されます。 この while はCSVファイルの終端までいくと終了します。 fgets関数は、呼び出すたびにファイルから一行ずつ読み込んでくれるので、 CSVファイルの先頭の6行は不要ということなら、例えば for (i = 0 ; i < 6 ; i++) { fgets(str, MAX_STR, in); } とすると、先頭の6行はスキップできます。 また、読み込んだCSVの文字列から対象の値を読み込むには、strtok関数などを使って カンマで文字列を分解するようにするといいのではないかと思います。 strtok関数で文字列を分解したら、必要な値の部分の文字列をatoi関数(もし小数ならatof関数)で数値に変換し、 必要な計算を行った後に、fprintf関数で out で開いている方のファイルに出力する…。という流れになるんじゃないかと思います。 いかがでしょう? http://www9.plala.or.jp/sgwr-t/lib/strtok.html http://www.bohyoh.com/CandCPP/C/Library/atoi.html http://www.bohyoh.com/CandCPP/C/Library/fprintf.html

agara830
質問者

お礼

できました。ありがとうございます。 最終的には while(fgets(str,256,inp)!=NULL){ line++; if(line>start){ k++; times=time*k; n=strtok(str,", "); n1=atoi(n); n2=((double)n1)*20/65536-10; printf("%lf %lf \n",times,n2); fprintf(outp,"%lf %lf \n",times,n2); } } のような形にしました。 あと、恥ずかしい話ですが、 なんどやっても上手くいかない原因の一つにfopenの書き込む側のモードまでrにしていたというのがありました;;

その他の回答 (1)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

fgets で「ファイルから一行ずつ読み込んでくれる」と言い切っちゃうのはいかがなものだろうか>#1. 1行の長さがわかっているならともかく. あと, 「実際のデータが入っている」 6行目以降はどういう形式になっているんでしょうか? 1行に 1個しかデータがないなら, 特に困ることもないような気がしますが.

agara830
質問者

お礼

書き込むべきはこちらでしたね。 ありがとうございました。

agara830
質問者

補足

ありがとうございます。 データは基本的には1行に1つですが、2つの場合もできるとありがたいです。

関連するQ&A