#include "stdio.h" #include "astring.h" #include "string.h" #include "stdlib.h" #include "math.h" #include "flatfile.h" #include "amag.h" void main(int argc, char *argv[]) { char filein[100], fileh[100], fileout[100]; char line[1000], stat[10], *mis, *temp, *comp, *scomp; FILE *fpin, *fph; int done,i,j,k; float tim, sam, fiv, missing; int sec, hou, mse, yr, mo, da, itime[6]; float mulfac[4]={1.0,1.0/3600.0,0.25,1.0/600.0}; float mul[3], off[3]; float indata[3][1440], xyz[2], pi=3.1415926; double uttime, basetime; float outdata[10]; char ff_var[100],ff_units[100],ff_source[100],ff_type[100]; char ff_notes[100], sdate[30]; int order[3], count, datatemp, error, unit, nvar, outrow, nfiles, cfile; comp = malloc(sizeof(char)*5); scomp = comp; mis = malloc(sizeof(char)*10); if (argc < 2) { printf("Enter filename to convert : "); gets(filein); nfiles = 1; } else { nfiles = argc - 1; strcpy(filein, argv[1]); } for (cfile=1;cfile<=nfiles;cfile++) { if (cfile > 1) strcpy(filein,argv[cfile]); strcpy(fileh,strmid(filein,0,strloc(filein,"."))); strcat(fileh,"help"); printf("data file : %s\n",filein); printf("help file : %s\n",fileh); fph = fopen(fileh,"r"); if (fph == NULL) printf("File isn't open.\n"); done = 0; while (!feof(fph) && done == 0) { fgets(line,200,fph); if (strloc(line,"station") >= 24) { strcpy(stat,strmid(line,strloc(line,"=")+1,4)); if (strloc(mklower(stat),"bj") != -1) strcpy(stat,"BJN"); if (strloc(mklower(stat),"ny") != -1) strcpy(stat,"NAL"); if (strloc(mklower(stat),"ho") != -1) strcpy(stat,"HOP"); if (strloc(mklower(stat),"ja") != -1) strcpy(stat,"JAN"); if (strloc(mklower(stat),"lo") != -1) strcpy(stat,"LYR"); if (strloc(mklower(stat),"tr") != -1) strcpy(stat,"TRO"); change_station_name(stat); printf("station - %s\n",stat); strcpy(fileout, mklower(stat)); } if (strloc(line,"latitude") == 10) { printf("Latitude : %s\n",strmid(line,40,7)); printf("Longitude : %s\n",strmid(line,48,7)); } if (strloc(line,"sample") == 7) { sec = atoi(strmid(line,52,3)); hou = atoi(strmid(line,45,2)); mse = atoi(strmid(line,61,2)); tim = ((float) hou)*3600.0+(float) sec+((float) mse)/100.0; sam = 86400.0/tim; if (sam != 1440.0) { printf("Program may have some problems - sample rate is wrong.\n"); } fiv = 5.0*60.0/tim; } if (strloc(line,"component") == 18) { done = 1; } } strcpy(ff_var,"time"); for (i=0; i<3; i++) { if (i != 2) { done = 0; } else { done = 1; } strcat(ff_var,","); strcat(ff_var,stat); if (i == 0) strcat(ff_var,"X"); if (i == 1) strcat(ff_var,"Y"); if (i == 2) strcat(ff_var,"Z"); strcpy(comp,strmid(line,39,1)); comp++; fgets(line,79,fph); if (i == 0) { strcpy(mis,strmid(line,41,6)); strcat(mis,".0"); missing = atof(mis); } fgets(line,79,fph); fgets(line,79,fph); mul[i] = mulfac[atoi(strmid(line,46,1))-1]; fgets(line,79,fph); fgets(line,79,fph); strcpy(mis,strmid(line,59,6)); strcat(mis,".0"); off[i] = atof(mis)*mul[i]; done = 0; while ((!feof(fph)) && (done == 0)) { fgets(line,79,fph); if (strloc(line,"component") == 18) { done = 1; } } } close(fph); order[0] = strloc(scomp,"H")-1; if (order[0] == -1) order[0] = strloc(scomp,"X")-1; order[1] = strloc(scomp,"D")-1; if (order[1] == -1) order[1] = strloc(scomp,"E")-1; if (order[1] == -1) order[1] = strloc(scomp,"Y")-1; order[2] = strloc(scomp,"Z")-1; count = 0; for (i=0; i<3; i++) { if (order[i]==-1) count++; } strcpy(ff_units,"s,nT,nT,nT"); strcpy(ff_source,"from file listed below,same,same,same"); strcpy(ff_type,"T,R,R,R"); strcpy(ff_notes,"converted from file : "); strcat(ff_notes,filein); nvar = 4; fpin = fopen(filein,"r"); fgets(line,79,fpin); fgets(line,79,fpin); yr = atoi(strmid(line, 1,4)); mo = atoi(strmid(line, 8,2)); if (yr > 1900) { yr = yr - 1900; if (yr > 100) yr = yr - 100; } strcat(fileout,c_int_str(yr,2)); if (mo == 1) strcat(fileout,"01"); if (mo == 4) strcat(fileout,"02"); if (mo == 7) strcat(fileout,"03"); if (mo == 10) strcat(fileout,"04"); error = mkhead(fileout,nvar,ff_var,ff_units,ff_source,ff_type,ff_notes); if (!error) unit = ffcreate(fileout); if (error || unit == -1) error = 1; if (error) { printf("error in creating flat file. Can not continue.\n"); } else { rewind(fpin); fgets(line,79,fpin); fgets(line,79,fpin); while (!feof(fpin)) { yr = atoi(strmid(line, 1,4)); mo = atoi(strmid(line, 8,2)); da = atoi(strmid(line,13,2)); for (j=0; j<3; j++) { for (i=0; i < (int) (sam/10.0); i++) { for (k=0; k < 10; k++) { fscanf(fpin, "%d", &datatemp); if ((float) datatemp == missing) { indata[j][i*10+k] = missing; } else { indata[j][i*10+k] = ((float) datatemp)*mul[j]+off[j]; } } } if (!feof(fpin)) { fgets(line,79,fpin); fgets(line,79,fpin); fgets(line,79,fpin); } } if (strloc(scomp,"D") == order[1]+1) { for (i=0; i<(int) sam; i++) { if ((indata[order[0]][i] != missing) && (indata[order[1]][i] != missing)) { xyz[0] = indata[order[0]][i]*cos(indata[order[1]][i]*pi/180.0); xyz[1] = indata[order[0]][i]*sin(indata[order[1]][i]*pi/180.0); } else { xyz[0]=-1.0e32; xyz[1]=-1.0e32; } indata[0][i] = xyz[0]; indata[1][i] = xyz[1]; } } itime[0] = yr; itime[1] = mo; itime[2] = da; itime[3] = 0; itime[4] = 0; itime[5] = 0; basetime = c_i_to_r(itime); strcpy(sdate,c_i_to_s(itime)); for (i=0; i<(int) sam; i++) { uttime = basetime + ((double) 86400.0)*((double) i)/((double) sam); for (j=0;j<3;j++) outdata[j] = indata[j][i]; error = fdput(unit,outrow,uttime,outdata); outrow++; if (error) printf("Error in writting to file.\n"); } } error = ffclose(unit); if (error) printf("error in closing flat file.\n"); fclose(fpin); } } }