• 締切済み

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/2844)
回答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のポイント
  • 折れ戸の浴室ドアの下レールの塗装が剥げてしまった。
  • DIY経験者が、塗装前に剥がれた部分を処理するたいと考え、アドバイスを求めている。
  • 効果的な処理方法や薬剤について知りたい。
回答を見る

専門家に質問してみよう