c言語で2次元配列を一気に読み込みさせる方法
お久しぶりです。かずです。
研究の進捗はほとんどないですが、最近、効率化できたprogramがあるので記載。
天文学でカタログをいじるなどのデータサイエンスをしていると、二次元の配列をよく使います。
しかし、その全ての情報を読み込ませようとすると、(一次元)配列もその設定も長ったらしいことになります。
例えば、こんな感じ。
FILE *fp;
if*1==NULL){
printf("ファイル読み込めません\n");
}
for(i=0; fgets(buf1,sizeof(buf1),fp)!=NULL; i++){
fscanf(fp,"%f %f %d %d %f %f %f %f %f %f %f %f %f %f %f %f %f %f %d %d %f %f",&r2_0_3[i],&r2[i],&pix1[i],&pix2[i],&bunsi[i],&sigmaA1[i],&bunbo[i],&sigmaA2[i],&B1[i],&sigmaB1[i],&B2[i],&sigmaB2[i],&gosa1[i],&gosa2[i],&Con[i],&sgmCon[i],&logCon[i],&sigmaCon[i],&xcl[i],&ycl[i],&xc[i],&yc[i]);
tentai=i;
}
fclose(fp);
とまぁ、こんな感じで、非常に書くのが大変なのです。
それを、
for(i=0; fgets(buf,sizeof(buf),fpcat1)!=NULL; i++){
fscanf(fpcat1,"%s",name[i]);
for(j=0;j<number;j++){
fscanf(fpcat1,"%f",&sample[i][j]);
}
tentai1=i;
}
これでスッキリしました。
この場合は、1列目にchar型のものが入っているので、それだけ別で読み込み、残りの数値は全部float型にはなってしまいますが、「sample[i][j]」という二次元配列にねじ込みます。
よって、i行目のj列目というふうに指定することで、大きな二次元配列でも読み込むことができ、カタログの情報をケチることなく扱うことができます。
ということで、今日はここまで。
今から、久々にGALAXEV使います。
*1:fp=fopen(fname1,"r"