/*----------------------------*/ /* プログラム:gccGRDAEN.c */ /*----------------------------*/ #include #include #include #include #define ND 1000 #define MM 10 /*gnuplot用構造体宣言*/ /*scom,sxjiku,syjiku :タイトル(凡例),x軸ラベル,y軸ラベル*/ /*slogx,xmin,xmax,dx,sxfmt :x軸種,x軸最小値,x軸最大値,x軸増分,x軸書式*/ /*slogy,ymin,ymax,dy,syfmt :y軸種,y軸最小値,y軸最大値,y軸増分,y軸書式*/ struct GPdata{ char scom[100];char sxjiku[100];char syjiku[100]; char slogx[3];double xmin;double xmax;double dx;char sxfmt[20]; char slogy[3];double ymin;double ymax;double dy;char syfmt[20]; }; void main_part(char fnameR[50],char fnameW[50],char fnameP[50]); void GPLOT(char fnameP[50],char fnameW[50],int nnn,double pp, char legend[MM][15],char temp[MM][15],struct GPdata gp); void MKAIKI(int ndata, double datax[ND], double datay[ND], double *aa, double *bb, double *rr, double *xm,double *sx,double *ym,double *sy); /*---------------------------------------------------------------------------*/ int main(int argc,char *argv[]) { char fnameR[50]=""; /*入力ファイル名*/ char fnameW[50]=""; /*出力テキストファイル名*/ char fnameP[50]=""; /*出力画像ファイル名*/ strcpy(fnameR,argv[1]); strcpy(fnameW,argv[2]); strcpy(fnameP,argv[3]); main_part(fnameR,fnameW,fnameP); printf("リターンキーを押してください"); getchar(); return 0; } /*---------------------------------------------------------------------------*/ void main_part(char fnameR[50],char fnameW[50],char fnameP[50]) { char dat[256]="",sv[100]=""; int i,k,nnn,ndata[MM]; double pp; /*楕円内確率*/ double aa,bb,rr; /*回帰係数,相関係数*/ double xm,sx,ym,sy; /*平均値,標準偏差*/ struct GPdata gp={ "","","", "",0.0,0.0,0.0,"", "",0.0,0.0,0.0,"" }; char legend[MM][15]={"","","","","","","","","",""};/*凡例名(プロット名)*/ char temp[MM][15]={"","","","","","","","","",""};/*プロット用一時ファイル名*/ double datax[ND],datay[ND]; FILE *fin,*fout,*ftemp; /****************************/ /*データ入力*/ /****************************/ fin=fopen(fnameR,"r"); fgets(dat,sizeof dat,fin); strcpy(sv,strtok(dat,",")); strncat(gp.scom,sv,strlen(sv)-1); fgets(dat,sizeof dat,fin); strcpy(gp.sxjiku,strtok(dat,",")); strcpy(sv,strtok(NULL,",")); strncat(gp.syjiku,sv,strlen(sv)-1); fgets(dat,sizeof dat,fin); strcpy(gp.slogx,strtok(dat,",")); gp.xmin=atof(strtok(NULL,",")); gp.xmax=atof(strtok(NULL,",")); if(strncmp(gp.slogx,"N",1)==0){ gp.dx=atof(strtok(NULL,",")); strcpy(sv,strtok(NULL,",")); strncpy(gp.sxfmt,sv,strlen(sv)-1); } fgets(dat,sizeof dat,fin); strcpy(gp.slogy,strtok(dat,",")); gp.ymin=atof(strtok(NULL,",")); gp.ymax=atof(strtok(NULL,",")); if(strncmp(gp.slogy,"N",1)==0){ gp.dy=atof(strtok(NULL,",")); strcpy(sv,strtok(NULL,",")); strncpy(gp.syfmt,sv,strlen(sv)-1); } fgets(dat,sizeof dat,fin); nnn=atoi(strtok(dat,","))-1; pp=atof(strtok(NULL,",")); /****************************/ /*統計量保存ファイルopen*/ /****************************/ fout=fopen(fnameW,"w"); fprintf(fout,"name,ndata+1,aa,bb,rr,xm,sx,ym,sy\n"); for(k=0;k<=nnn;k++){ fgets(dat,sizeof dat,fin); ndata[k]=atoi(strtok(dat,","))-1; strcpy(sv,strtok(NULL,",")); strncat(legend[k],sv,strlen(sv)-1); for(i=0;i<=ndata[k];i++){ fgets(dat,sizeof dat,fin); datax[i]=atof(strtok(dat,",")); datay[i]=atof(strtok(NULL,",")); } /*対数軸の場合の処理*/ if(strncmp(gp.slogx,"L",1)==0){ for(i=0;i<=ndata[k];i++){ if(datax[i]