- 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
278 :デフォルトの名無しさん[]:2016/01/13(水) 20:41:54.84 ID:kNuNR485 - fscanfでcsvファイルからデータを読み出したいのですが、
fscanfの返り値がおかしく、EOFとならずに処理が終了しません。 データの列要素は15なので、返り値も15となるはずなのですが、 「1」と表示されてしまいます。 行は2千万行近くありますが、その値を過ぎても終了しません。 csvファイルのデータ容量は1.42GBあります。 助言宜しくお願いします。 問題だと思われるループとfscanfの部分を記載します。 while(ret=fscanf(fp,
| - 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
279 :デフォルトの名無しさん[]:2016/01/13(水) 20:44:10.04 ID:kNuNR485 - while(ret=fscanf(fp,"%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf,%lf",&a,&b,&c,
&d[0][0],&d[0][1],&d[1][0],&d[1][1],&d[2][0],&d[2][1], &e[0][0],&e[0][1],&e[1][0],&e[1][1])!=EOF){ 処理等 }
| - 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
281 :デフォルトの名無しさん[]:2016/01/13(水) 20:49:56.90 ID:kNuNR485 - >>280
すいません書き忘れてました。 FILE *fp fp=fopen("example.csv","r"); if(fp==NULL){ printf("no file\n"); exit(0); }
| - 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
285 :デフォルトの名無しさん[]:2016/01/13(水) 20:58:57.11 ID:kNuNR485 - retの部分は解決できました。ありがとうございます。
今確認してみたところ、最終行を迎えたあと、fscanfの返り値は0となっていました。
| - 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
286 :デフォルトの名無しさん[]:2016/01/13(水) 21:02:30.81 ID:kNuNR485 - 最終行を迎えてもEOFである-1が返ってこない理由としては、どのような理由が考えられるでしょか?
| - 【初心者歓迎】C/C++室 Ver.97【環境依存OK】 [転載禁止]©2ch.net
287 :デフォルトの名無しさん[]:2016/01/13(水) 21:09:44.61 ID:kNuNR485 - その場しのぎですが、
while((ret=fscanf())!=0)とすることで解決しました。 エクセルファイルの作成方法が間違っていたのかもしれません。 そちらを確認したいと思います。 ありがとうございました。
|
|