- ベストアンサー
C言語の配列について
- C言語の配列を使って、CSVファイルのデータを二次元配列として読み込みたいがうまくいかない。
- アドバイスによると、三次元配列を使用する必要があるが、具体的な手順が分からない。
- CSVファイルのデータが11行と1440列あり、期待する結果は一行が終わるごとに配列の添え字が変わること。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
#include <stdio.h> #include <stdlib.h> int main(void) { FILE *fp; char *fname = "./test1/test2/201509/test.csv"; char *buf; long fsize,cp; int rc,lc,cc; char *array[11][1500]; fp = fopen(fname,"rt"); if (fp == NULL) { printf("%sファイルが開けません\n", fname); return 1; } fseek(fp,0L,SEEK_END); fsize = ftell(fp); fseek(fp,0L,SEEK_SET); buf = (char *)malloc(fsize + 1); fsize = fread(buf,1,fsize,fp); if (fsize == 0) { printf("%sファイルを読み込めません\n", fname); free(buf); fclose(fp); return 1; } fclose(fp); for (lc = 0;lc < 11;lc++) { for (cc = 0;cc < 1500;cc++) { array[lc][cc] = NULL; } } buf[fsize] = '\0'; array[0][0] = buf; for (lc = 0,cc = 0,cp = 0;cp < fsize;cp++) { if (buf[cp] == ',') { buf[cp] = '\0'; array[lc][++cc] = &buf[cp+1]; } if (buf[cp] == '\n') { buf[cp] = '\0'; cc = 0; array[++lc][cc] = &buf[cp+1]; if (lc == 11) break; } } for (lc = 0;lc < 11;lc++) { for (cc = 0;cc < 1500;cc++) { if (array[lc][cc] != NULL) { printf("array[%d][%d]=[%s]\n",lc,cc,array[lc][cc]); } } } free(buf); return 0; }
その他の回答 (2)
- hiodraiu
- ベストアンサー率15% (451/2846)
前の質問で具体的に書いてますよね > 三次元配列にしないといけないとのアドバイスをいただいたのですがどのようにすればいいかわかりませんヒントを頂けるとたすかります。 どのようにすればいいかって質問が書き方でないのなら、そこも明記しないと何を問うているのかわからないですよ。
お礼
そうですね一度他の回答者の方がおしゃているように1行だけで表示してからにしようとおもいます。ありがとうございます。
- f272
- ベストアンサー率46% (8467/18126)
もとファイルが testt,esttest,testte,stte,sttest testte,sttes,ttest,~ となっているのなら [0][0] = [testt] [0][1] = [esttest] [1][0] = [testte] のようになってほしいのではないですか? まあ,今のあなたでは難しそうですから,まずはそのCSVファイルの最初の文字列を一つだけ読めるようになってください。 複数の文字列を読んで配列に入れるのは,それが出来るようになるまで待ったほうが良い。
お礼
わかりました。ありがとうございます。
お礼
ありがとうございます。今確認したところ私のレベルではまだ何が行われているかわからないですね汗解読できるようがんばります