#include "stdio.h" #include "stdlib.h" #include "string.h" #include "astring.h" #include "flatfile.h" void main(int argc, char *argv[]) { FILE *fp; int nvar, var, error; long row, cpos, lpos; int yr,mo,da,ho,mi,se,itime[6]; double uttime; float data[100], dumdata; char filename[100], vtemp[15], utemp[15], fileout[100]; int nfiles, cfile, done, p1, p2, p3, outunit, nchar,n; char var_name[3000],var_units[3000],var_source[3000],notes[600]; char var_type[300], line[80], *line2; char *pfn, *pvn, *pvu, *pvs, *pvt, *pno, dumb; if (argc < 2) { printf("Enter file name to convert : "); gets(filename); nfiles = 1; } else { nfiles = argc - 1; strcpy(filename, argv[1]); } for (cfile=1;cfile<=nfiles;cfile++) { if (cfile > 1) { strcpy(filename, argv[cfile]); } printf("Working on file : %s\n",filename); printf("Enter file name to output : "); gets(fileout); if ( (fp=fopen(filename, "r")) == NULL) { printf("File %s can not be opened.\n",filename); } else { fgets(line, 79, fp); if (strloc(line, "File") == 1) { strcpy(notes, "Copied from "); strcat(notes, line); done = 0; while (!done) { fgets(line, 79, fp); if (strloc(line, "File") == 1) { strcat(notes, ",Copied from "); strcat(notes, line); } else { done = 1; } } for ( row = 0 ; row < 5 ; row++) { fgets(line, 79, fp); } } else { for ( row = 0 ; row < 5 ; row++) { fgets(line, 79, fp); } } done = 0; nvar = 1; strcpy(var_name, "time"); strcpy(var_units, "seconds"); strcpy(var_source, "original flat file"); strcpy(var_type, "t"); while (!done) { fgets(line, 79, fp); if (strloc(strcompress(line,0), "Variable") == 1) { p1 = strloc(line,":")+1; p2 = strloc(line,"("); p3 = strloc(line,")")-1; strcpy(vtemp,strmid(line, p1, p2-p1-1)); if (p3-p2 > 0) { strcpy(utemp,strmid(line, p2, p3-p2)); } else { strcpy(utemp," "); } strcat(var_name, ","); strcat(var_name, vtemp); strcat(var_units, ","); strcat(var_units, utemp); strcat(var_source, ",See notes below"); strcat(var_type, ",r"); nvar = nvar + 1; } else { done = 1; } } pfn = fileout; pvn = var_name; pvu = var_units; pvs = var_source; pvt = var_type; pno = notes; mkhead(pfn, nvar, pvn, pvu, pvs, pvt, pno); outunit = ffcreate(pfn); nvar--; fgets(line, 79, fp); fgets(line, 79, fp); row = 0; cpos = ftell(fp); fseek(fp,0,SEEK_END); lpos = ftell(fp); if (lpos-cpos < 29) { getc(fp); } else { fseek(fp,cpos,SEEK_SET); } nchar = 6*3+nvar*11+2; line2 = calloc(sizeof(char),nchar); while (!feof(fp)) { dumb = ' '; n=0; while ((dumb != '\n') && (!feof(fp))) { dumb = getc(fp); if ((n < 18) && (!isdigit(dumb))) dumb = ' '; line2[n] = dumb; n++; } for (n=0;n<6;n++) { itime[n] = atoi(strmid(line2,n*3,3)); } uttime = c_i_to_r(itime); for (var = 0; var < nvar; var++) { data[var] = atof(strmid(line2,18+var*11,11));} error = fdput(outunit, row, uttime, data); if (error) printf("Error in writing row %d.\n",row); row++; } error = ffclose(outunit); if (error) { printf("Error in closing the flatfile.\n"); } else { printf("File conversion complete.\n"); } close(fp); } } }