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"