eccodes/experimental/gribex/grib_api_count.c

46 lines
833 B
C

#include "grib_api.h"
void usage(char* prog) {
printf("usage: %s [edition] in.grib\n",prog);
exit(1);
}
int main(int argc, char* argv[]) {
FILE* fh;
grib_handle* h;
int count;
int err;
long edition,editionToSearch;
char* file;
char identifier[10]={0,};
size_t slen=10;
if (argc < 2 || argc > 3 ) usage(argv[0]);
if (argc==3) {
editionToSearch=atoi(argv[1]);
file=argv[2];
} else {
editionToSearch=0;
file=argv[1];
}
fh=fopen(file,"r");
if (!fh) {
perror(file);
exit(1);
}
count=0;
while( h=grib_handle_new_from_file(0,fh,&err)) {
grib_get_long(h,"edition",&edition);
slen=10;
grib_get_string(h,"identifier",identifier,&slen);
if (!strcmp(identifier,"GRIB") && (editionToSearch==0 || edition==editionToSearch)) count++;
grib_handle_delete(h);
}
printf("%d\n",count);
fclose(fh);
}