##// END OF EJS Templates
Review updata app
Review updata app

File last commit:

r0:b84e1135c2c4
r8:9c1b6919a8a9
Show More
splitCbfFile.c
168 lines | 5.1 KiB | text/x-c | CLexer
/* $Id: splitCbfFile.c 3304 2011-01-17 15:25:59Z brideout $ */
/*
modification history
--------------------
00a,02apr02 original
*/
/*
USAGE: splitCbfFile cbfFileName
e.g.: splitCbfFile sts660125a.cbf
splitCbfFile splits the files in a multi-file CBF file into individual
files. This needs to be done prior to entering CBF files from NCAR
into the Madrigal Database. This is a rare example of a production program
which uses the low-level cedarIO routines. The reason is that above
this level the cbf distiction between end-of-file and end-of-data is
lost.
*/
#include <stdlib.h>
#include <string.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
#include <stdio.h>
#include <cedarIO.h>
#include <cedar.h>
int
main (argc, argv)
int argc;
char *argv[];
{
int ind1, ind2, nrec;
char infile[100];
FILE *foutp = NULL;
FILE *finp, *flp;
Int16 *cedarRecordp=(Int16 *)NULL;
int fileType;
/* madrigal state variables */
int madrigalBlockSize=6720;
/* Cbf state parameters */
int cbfBlockSize=4096;
int forceCosRead=0, initPos8, initPos=0, initLCosBlock=0,
lCosBlock=0, gpos=0, initFwi=0, fwi=0;
Int16 *cosRecordp=(Int16 *) NULL;
int n, ibyr, ibdt, ibymd, newfile, kinst, month, day,
fileCategory, action;
char outfile[128], tag[6], staName[4], expDir[128], expName[128],
y[3], m[3], d[3], fileList[100];
char months[12][4];
kinst = 0;
sprintf(months[0], "%s", "jan");
sprintf(months[1], "%s", "feb");
sprintf(months[2], "%s", "mar");
sprintf(months[3], "%s", "apr");
sprintf(months[4], "%s", "may");
sprintf(months[5], "%s", "jun");
sprintf(months[6], "%s", "jul");
sprintf(months[7], "%s", "aug");
sprintf(months[8], "%s", "sep");
sprintf(months[9], "%s", "oct");
sprintf(months[10], "%s", "nov");
sprintf(months[11], "%s", "dec");
if (argc == 3) {
strcpy(infile, argv[1]);
strcpy(fileList, argv[2]);
} else {
(void) printf("Usage: splitCbfFile inputFile outputFile\n");
return(1);
}
flp = fopen(fileList, "w");
/* Check file type of start file */
(void) printf("Input file = %s\n", infile);
fileType = cedarFileType(infile, madrigalBlockSize, cbfBlockSize);
(void) printf("%s - fileType = %d\n", infile,fileType);
/*** Cbf to Ascii ***/
finp = fopen(infile, "r");
n = 0;
lCosBlock = 0;
gpos = 0;
fwi = 0;
cosRecordp = (Int16 *) NULL;
nrec = 0;
newfile = 1;
while((ind1 = getNextCedarCbfRecord(finp, &cedarRecordp,
forceCosRead,
cbfBlockSize,
&initPos8,
&initFwi,
&initPos,
&initLCosBlock,
&lCosBlock,
&gpos,
&fwi,
&cosRecordp)) != -2) {
if (ind1 == 0) {
kinst = cedarGetKinst(cedarRecordp);
ibyr = cedarGetIbyr(cedarRecordp);
ibdt = cedarGetIbdt(cedarRecordp);
month = ibdt/100;
day = ibdt - 100*month;
sprintf(m, "%2.2d", month);
sprintf(d, "%2.2d", day);
sprintf(y, "%2.2d", ibyr - 100*(ibyr/100));
ibymd = 10000*(ibyr - 100*(ibyr/100)) + ibdt;
if (newfile == 1) {
n++;
sprintf(tag,"%6.6d", ibymd);
staName[0] = infile[0];
staName[1] = infile[1];
staName[2] = infile[2];
staName[3] = '\0';
strcpy(outfile, staName);
strcat(outfile, tag);
strcat(outfile, "g.001");
foutp = fopen(outfile, "w");
newfile = 0;
nrec = 0;
sprintf(expDir, "%4.4d", ibyr);
strcat(expDir, "/");
strcat(expDir, staName);
strcat(expDir, "/");
strcat(expDir, d);
strcat(expDir, months[month-1]);
strcat(expDir, y);
/* sts660125g.001 1966/sts/25jan66 41 "St Santin I.S. Radar data" 1 1 */
}
ind2 = putNextCedarAsciiRecord(foutp, &cedarRecordp);
nrec++;
} else if (ind1 == -1) {
/* printf("Wrote %d records to %s\n", nrec,outfile); */
strcpy(expName, "\"St Santin Data Archive\"");
fileCategory = 1;
action = 1;
printf("%s %s %d %s %d %d\n",
outfile, expDir, kinst, expName, fileCategory, action);
fprintf(flp, "%s %s %d %s %d %d\n",
outfile, expDir, kinst, expName, fileCategory, action);
ibyr = 0;
ibdt = 0;
ibymd = 0;
(void) fclose(foutp);
newfile = 1;
} else {
printf("Fatal error: ind1 = %d\n", ind1);
return(-1);
}
}
(void) fclose(finp);
(void) fclose(foutp);
return(0);
}