- ベストアンサー
CSVファイルの読み込み方法とデータ構造体への格納方法
- fscanf関数を使ってCSVファイルの内容をデータ構造体に格納する方法を教えてください。
- 質問者は4列目以降のデータがうまく読み込めていないと報告しています。
- 初歩的な質問ですが、回答をお願いします。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
何をやりたいのかわからないが、こういうこと? #include <stdio.h> #include <string.h> #include <stdlib.h> #define FILE_NAME "view_001_McdlData.csv" struct Data{ int DataNo; int FrameNo; int SampleNo; char Digital; double voltage; double trigger; double C; double D; }; main() { FILE *fp; int n,i; struct Data *dat; if ((fp = fopen(FILE_NAME,"r")) == NULL) { printf( "file open error\n" ); exit(EXIT_FAILURE); } //データの読み込み n = -1; dat = NULL; do { n++; dat = realloc(dat,sizeof(struct Data) * (n + 1)); } while(fscanf(fp, "%d,%d,%d,%x,%lf,%lf,%lf,%lf", &dat[n].DataNo,&dat[n].FrameNo,&dat[n].SampleNo,&dat[n].Digital, &dat[n].voltage,&dat[n].trigger,&dat[n].C,&dat[n].D) != EOF); fclose(fp); for(i = 0;i < n;i++) printf("%d %d %d %c %lf %lf %lf %lf\n", dat[i].DataNo,dat[i].FrameNo,dat[i].SampleNo,dat[i].Digital, dat[i].voltage,dat[i].trigger,dat[i].C,dat[i].D); }
その他の回答 (2)
- yaemon_2006
- ベストアンサー率22% (50/220)
dataの配列の領域を確保するのにfile_sizeを使うのはおかしいし、 ファイルをテキストで開いた場合、ftellが返すのは "ファイルポインタの位置を示す何らかの数値"であって、 文字数やバイト数とは限らない。
- SaKaKashi
- ベストアンサー率24% (755/3136)
4列目って文字型だよね%sだから。 文字型のfscanfの%sには&dat[i].Digitaじゃなくdat[i].Digitalでは。 しかも文字列だから最低char Digital[2];じゃないと文字列+'\0'が格納できないでしょ。 一文字なら%c