• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:容量の大きいCSVファイルの読み込みについて)

容量の大きいCSVファイルの読み込みについて

このQ&Aのポイント
  • 23メガバイトあるCSVファイルに格納し、datファイルに書き込みを行いたいのですが、実行してみるとセグメンテーション違反が表示され上手くいきません。
  • ファイルを格納し標準出力するまでのプログラムとCSVファイルの内容を記述します。
  • MacOSでの環境です。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

fscanf( fp, "%[^,],%[^,],%[^,],%lf",dt[i].voltage,dt[i].pressure,dt[i].trigger) が変ですね。 1.[^,]は文字列読み込みなんでdouble型には渡せません。 2.%が4つあるのに後に続く変数が3つなのも変。 double型に読み込ませたいのなら fscanf( fp, "%lf,%lf,%lf\n",&dt[i].voltage,&dt[i].pressure,&dt[i].trigger)

matsuo423
質問者

補足

 ご指摘ありがとうございます。 早速、問題の部分を変更しましたが、実行してみると"Bus error"と表示され上手くいきません。  度々すみませんが、御指南おねがいします。

すると、全ての回答が全文表示されます。

その他の回答 (3)

回答No.4

#1です。 bus errorね "&"付け忘れてない? &dt[n].voltage,&dt[n].pressure,&dt[n].trigger もしくはmalloc失敗とか

すると、全ての回答が全文表示されます。
回答No.3

なんで cp や mv や more を使わないのかと思ったら MacOS ですか。 /* Gcc on Mac OSX */ #include <stdio.h> #include <string.h> #include <stdlib.h> #define SIZE 64 #define FILE_NAME "p37-e1.csv" struct Data{ double voltage; double pressure; double trigger; }; int main(int argc, char *argv[]) { FILE* fp; // ファイルポインタ用 int n, i, file_size; struct Data *dat; char buff[SIZE]; if ((fp = fopen(FILE_NAME,"r")) == NULL) { printf( "file open error\n" ); exit(EXIT_FAILURE); } /* 理由:3×8=24 bytes < 「2.329595,0.001373,-4.861982」=27 bytes */ fseek(fp, 0, SEEK_END); file_size = ftell(fp); dat = (struct Data*)malloc(file_size); printf("malloc address= %p, file size= %d\n", dat, file_size); fseek(fp, 0, SEEK_SET); i = 0; while(fgets( buff, SIZE, fp) != NULL ){ dat[i].voltage = atof(strtok(buff, ",")); dat[i].pressure = atof(strtok(NULL, ",")); dat[i].trigger = atof(strtok(NULL, "\n")); i++; } fclose(fp); printf("\n"); printf("Read File (%d lines) *******************\n", i); for (n = 0; n < i; n++) printf("%lf,%lf,%lf\n",dat[n].voltage,dat[n].pressure,dat[n].trigger); free(dat); return 0; }

すると、全ての回答が全文表示されます。
  • titokani
  • ベストアンサー率19% (341/1726)
回答No.2

>dt = (struct Data*)malloc(sizeof(struct Data)*D_LENGTH); >while( ( ret = fscanf( fp, "%[^,],%[^,],%[^,],%lf",dt[i].voltage,dt[i].pressure,dt[i].trigger) ) != EOF ){ mallocが成功したかどうかチェックしていませんよ。

すると、全ての回答が全文表示されます。
このQ&Aのポイント
  • PCL P635を使用して液晶テレビに接続しているELD-STV040UBKのHDDが待機中に頻繁に動作音を出す問題が発生しています。
  • フォーマットや接続し直しを試しても問題は解決されず、エレコムHPでもこのHDDは動作確認済みとされています。
  • 購入直後から発生している問題で、解決策を教えていただきたいです。
回答を見る

専門家に質問してみよう