/*
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);*/
}