• 締切済み

csvファイルを読み込んで二次元配列に格納したい

200×250のある数字と文字の入力されたcsvファイル(またはtxtファイル)を読み込んで2次元配列に格納したいのです。 色々調べるとカンマの処理が必要ということがわかりましたが、どのようにソースを書けばよいかわかりません。使用言語はC言語です。 また、実際にcsvファイルを読み込むようにプログラムを書いてみましたが、すべて-858993460となって表示されます。 プログラミング初心者で勉強中なため困っています。 回答よろしくお願いします。 #include <stdio.h> #include <stdlib.h> #define row 200 #define column 250 int main() { int i, j; int data[row][column]; FILE *fp; fp = fopen("sample.csv", "r"); if (fp == NULL){ printf("ファイルがありません\n"); return 1; } for (i = 0; i < row; i++){ for (j = 0; j < column; j++){ fscanf(fp, "%lf", &data[i][j]); } } for (i = 0; i<row; i++){ for (j = 0; j < column; j++){ printf("%3d ", data[i][j]); } printf("\n"); } fclose(fp); return 0; }

みんなの回答

  • hiodraiu
  • ベストアンサー率15% (451/2846)
回答No.2

fscan関数で%lfを使って、data配列に値を入れてますが、dataは整数型ですよね。%lfは浮動小数点型ですから、型違いですよね。ここの部分でコンパイラは警告を出してくれませんか? カンマ処理については、fscanで値毎に読み込むのではなく、1行毎読み込んで、その行をカンマ毎に分割すれば良いと思います。分割するにはstrtok関数を利用すれば出来ると思います。 また、ここでは数値を対象としているようですが、読み込んで出力しているだけなら文字列で扱っても問題ないように思います。 勉強中とのことですから、数値で読み込んでおいて、printfで数値を文字列変換して出力するなんて複雑なことをするよりも、シンプルな方が問題に対処しやすいと思います。

  • skp026
  • ベストアンサー率45% (1010/2238)
回答No.1

-858993460について。 https://okwave.jp/qa/q6400399.html 配列の初期化について。 http://qiita.com/Ki4mTaria/items/b6ab0bcbe9c87d4dc071 C言語でcsvを扱うサンプルを探して、 参考にするのもひとつの方法です。 Googleなどで、 C言語 csv サンプル このようなキーワード検索をお試しください。 以下はその検索でヒットした例です。 https://algorithm.joho.info/programming/c-load-csv/ 参考にならなかったらごめんなさい。

関連するQ&A