/* C Example データ入出力の例文 #### コンパイル gcc hinagata.c -lm -o HINAGATA By NOGUCHI Katsuyuki (ISAS) Jul 09 2002 ver.1.0 Sep 27 2003 ver.1.1 */ #include <stdio.h> #include <math.h> #include <string.h> #include <stdlib.h> /*#include </usr/local/pgplot/cpgplot.h>*/ #define MAX_DATA_NUM 10000 /*関数のプロトタイプ宣言*/ void read_data(FILE *fp,double x[],double y[],int *num,int max); int main(int argc, char *argv[]) { char infilename[100],outfilename[100]; FILE *infp,*outfp; double x1[MAX_DATA_NUM],y1[MAX_DATA_NUM],x2[MAX_DATA_NUM],y2[MAX_DATA_NUM]; int i,num1,num2; if(argc!=3){ fprintf(stderr,"usage : cat infile1 | %s infile2 outfile1 > outfile2\n",argv[0]); exit(1); } strcpy(infilename,argv[1]); strcpy(outfilename,argv[2]); if((infp=fopen(infilename,"r"))==NULL){ fprintf(stderr,"Can't open infile\n"); exit(1); } if((outfp=fopen(outfilename,"w"))==NULL){ fprintf(stderr,"Can't open outfile\n"); exit(1); } /*infile1(標準入力)からの入力*/ read_data(stdin,x1,y1,&num1,MAX_DATA_NUM); /*infile2からの入力*/ read_data(infp,x2,y2,&num2,MAX_DATA_NUM); /*outfile1への出力*/ for(i=0;i<num1;i++){ fprintf(outfp,"%f %f\n",x1[i],y1[i]); } /*outfile2(標準出力)への出力*/ for(i=0;i<num2;i++){ fprintf(stdout,"%f %f\n",x2[i],y2[i]); } return(1); } void read_data(FILE *fp,double x[],double y[],int *num,int max) { /*先頭が#の場合は、コメントアウト行と見なす。*/ int i; char c; i=0; while(1){ c=fgetc(fp); if(c==EOF){/*fprintf(stderr,"break\n");*/break;} /*先頭が#の場合は、改行があるまで読み飛ばす*/ if(c=='#'){ /*fprintf(stderr,"%c",c);*//*for test*/ while(1){ c=fgetc(fp); /*fprintf(stderr,"%c",c);*//*for test*/ if(c=='\n')break; } } else{/*先頭が#でなければ、データ読み取り*/ /*最初に一字を読んだ分をいったん戻す*/ /*fseek(fp,-1L,SEEK_CUR);*//*fopenでファイルを開いている場合のみ*/ ungetc(c,fp);/*stdinからの入力でも対応可能*/ fscanf(fp,"%lf",&x[i]); fscanf(fp,"%lf",&y[i]); c=fgetc(fp);/*改行読み捨て*/ /*fprintf(stderr,"%f %f [%c]\n",x,y,c);*/ i++; if(i>max){ fprintf(stderr,"Too many data number\n"); exit(1); } } } *num=i; /*fprintf(stderr,"num %d\n",*num);*/ }