大学の研究で実験データをC++を使って処理しようと考えて,
実験によってデータ点数は5万点前後とまちまちなのですが,
0000や0001のように連続した番号の名前のCSVファイルをC++で1度読み込んで行数をカウントして,
カウントした行数nを配列定義の要素数に代入しようとしているのですが,
データ点数が多くなってしまったからなのか,
”segmentation foult”
と出てしまいました.
これを解決したいのですが,どのようにすればいいでしょうか?
追記
segmentation faultを解決しようとしてvectorを使ってみたのですが,
”note : template argument deduction/substitution failed :”
というエラーが出てしまいました.
lang
1#include <stdio.h> 2#include <vector> 3using namespace std; 4 5int main() 6{ 7 int nlin=0 , header=17; 8 int i,cnt,c,n; 9 vector<double> x1[cnt],x2[xnt],x3[cnt],x4[cnt]; 10 double sum1,sum2,sum3,sum4; 11 double I1,I2,I3,I4; 12 double I1_,I2_,I3_,I4_; 13 double dt=0.0000001; 14 char bff[100]; 15 FILE* fp; 16 FILE* save; 17 FILE* gp; 18 char fname[]={"file[n].csv"}; 19 char save_fname[]={"save[n].csv"}; 20 21//file loop 22for(n=0 ; n<=cnt ; n++) 23{ 24 25//line count part 26 fp =fopen(fname,"r"); 27 28 if(fp) 29 { 30 while(c=getc(fp)!=EOF); 31 { 32 if(c=='\n')cnt++; 33 } 34 35 } 36printf("%d\n",cnt); 37 38//return first line 39 rewind(fp); nlin=0; 40 41//file & gnuplot open for save 42 save = fopen("save[n].csv","w"); 43 gp = popen("gnuplot -persist","w"); 44 45//header cut part 46 while(fgets(bff,100,fp)!=NULL) 47 { 48 if(++nlin <= header)continue; 49 } 50 51//calibration value ~ integrater 52for(i=17 ; i<=2000 ; i++) 53{ 54 while(fscanf(fp,"%lf%lf%lf%lf",&x1[cnt],&x2[cnt],&x3[cnt],&x4[cnt])==4) 55 { 56 sum1 += x1[i]; 57 sum2 += x2[i]; 58 sum3 += x3[i]; 59 sum4 += x4[i]; 60 } 61} 62for(i=17 ; i<=cnt ; i++) 63 { 64//first point at each column 65 I1_= (x1[17] - sum1) * dt; 66 I2_= (x2[17] - sum2) * dt; 67 I3_= (x3[17] - sum3) * dt; 68 I4_= (x4[17] - sum4) * dt; 69 70//second ~ final point at 4each column 71 I1 = I1_ + (x1[i+1] - sum1) * dt; 72 I2 = I2_ + (x2[i+1] - sum2) * dt; 73 I3 = I3_ + (x3[i+1] - sum3) * dt; 74 I4 = I4_ + (x4[i+1] - sum4) * dt; 75 76//writing part on file 77 fprintf(save,"%f \t %f \t %f \t %f \n",I1_,I2_,I3_,I4_); 78 fprintf(save,"%f \t %f \t %f \t %f \n",I1,I2,I3,I4); 79 80 fprintf(gp,"plot %f with lines \n",I1); 81 fprintf(gp,"plot %f with lines \n",I2); 82 fprintf(gp,"plot %f with lines \n",I3); 83 fprintf(gp,"plot %f with lines \n",I4); 84 } 85 86 87pclose(gp); 88fclose(save); 89fclose(fp); 90} 91return 0; 92} 93 94コード