#include "stdio.h" #include "stdlib.h" #include "../include/astring.h" #include "../include/string.h" #include "../include/math.h" #include "../include/misc.h" #include "../include/flatfile.h" void main(int argc, char *argv[]) { char ff_var[100],ff_units[100],ff_source[100],ff_type[100]; char ff_notes[1000], filein[100], fileout[100]; char line[100], stat[4], slat[8], slon[8], sdumb[8], master[100]; char comp, linein[402], sdata[7], *uname, sdate[10]; float data[3][1440], lat, lon; float dataout[4], dt; double uttime,basetime; int i,j,k,itime[6], cfile, nfiles, icomp, ihrs, loc; int yr, mo, da, error, unit, nvar, icompmax, done; int npt[3], input, strl, datef; long dumb, orow, pos, lpos; FILE *fpin, *fpd; if (argc < 2) { printf("Enter filename to convert : "); gets(filein); nfiles = 1; } else { nfiles = argc - 1; strcpy(filein, argv[1]); } cfile = 1; while (cfile <=nfiles) { error = 0; if (cfile > 1) strcpy(filein,argv[cfile]); printf("Working on file %s\n",filein); fpin = fopen(filein,"r"); orow = 0; error = 0; fgets(linein, 80, fpin); for (i=0;i<6;i++) { itime[i] = atoi(strmid(linein,i*2,2)); } basetime = c_i_to_r(itime); fgets(linein, 80, fpin); for (i=0;i<6;i++) { itime[i] = atoi(strmid(linein,i*2,2)); } dt = (float) (c_i_to_r(itime)-basetime)/60.0; printf("Data is at %f minute resolution.\n",dt); strcpy(stat,strmid(linein,12,3)); strcpy(ff_var,"time,"); strcat(ff_var,stat); strcat(ff_var,strmid(linein,27,1)); strcat(ff_var,","); strcat(ff_var,stat); if (strpos(strmid(linein,27,1),"X") > -1 ) { strcat(ff_var,"Y,"); } else { strcat(ff_var,"E,"); } strcat(ff_var,stat); strcat(ff_var,"Z"); 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); fseek(fpin,0,SEEK_END); lpos = ftell(fpin); fseek(fpin,0,SEEK_SET); while ((!feof(fpin)) && (!error)) { for (i=0; i<1440/dt; i++) { for (j=0; j<3; j++) { data[j][i] = 999999.0; } } j = 0; while (j < 3) { i = 0; while (i < 1440/dt) { fgets(linein, 401, fpin); if (!feof(fpin)) { data[j][i] = atof(strmid(linein,19,6)); i++; } else { i = 1440/dt + 1; } } if (!feof(fpin)) { j++; } else { j=3; } } if (orow == 0) { nvar = 4; strcpy(fileout,mklower(stat)); strcat(fileout,c_int_str(itime[0],2)); strcat(fileout,c_int_str(itime[1],2)); 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 { for (i=0; i<1440/dt; i++) { for (k=0;k<3;k++) { if (data[k][i] < 99999.0) { dataout[k] = data[k][i]; } else { dataout[k] = -1.0e32; } } uttime=basetime+(double) (dt*60.0*(float)orow); error = fdput(unit,orow,uttime,dataout); if (error) printf("Error in writing data to file.\n"); orow++; } } pos = ftell(fpin); if (lpos-pos <= 40) { error = 1; } } if (unit != -1) ffclose(unit); cfile++; } }