44const char SELF[] =
"build_bufrdeco_tables";
67 printf (
"Usage: \n" );
68 printf (
"%s -i input_file -t table_type [-e[-h]\n" ,
SELF );
69 printf (
" -h Print this help\n" );
70 printf (
" -e Source ECMWF, default WMO\n" );
71 printf (
" -t table_type. (A = TableA, B = TableB, C = CodeFlag, D = TableD)\n" );
72 printf (
" -2 Version 35, 36 or 37\n");
73 printf (
" -3 Version 38 or newest\n");
77int main (
int argc,
char *argv[] )
92 while ( ( iopt = getopt ( argc, argv,
"hei:t:23" ) ) !=-1 )
96 if ( strlen ( optarg ) < 256 )
100 if ( strlen ( optarg ) < 8 )
116 exit ( EXIT_SUCCESS );
121 fprintf ( stderr,
"%s: Error. Need to provide Table Type with arg -t\n",
SELF );
122 exit ( EXIT_FAILURE );
129 else if ( (
f = fopen (
INPUT_FILE,
"r" ) ) == NULL )
131 fprintf ( stderr,
"%s: Error. Cannot open file '%s'\n",
SELF,
INPUT_FILE );
132 exit ( EXIT_FAILURE );
171 fprintf ( stderr,
"%s: Error, bad '%s' table type\n",
SELF,
TABLE_TYPE );
173 exit ( EXIT_FAILURE );
176 while ( fgets ( lin,
CSV_MAXL,
f ) != NULL )
181 fprintf ( stderr,
"%s: Error parsing csv line '%s' from file '%s'\n",
SELF, lin,
INPUT_FILE );
183 exit ( EXIT_FAILURE );
191 if ( strlen ( tk[fs[i]] ) )
206 printf (
"\"FXY\",\"ElementName_en\",\"Note_en\",\"BUFR_Unit\",\"BUFR_Scale\",\"BUFR_ReferenceValue\",\"BUFR_DataWidth_Bits\"\n" );
210 printf (
"\"FXY\",\"CodeFigure\",\"EntryName_en\",\"EntryName_sub1_en\",\"EntryName_sub2_en\",\"Note_en\"\n" );
214 printf (
"\"FXY1\",\"FXY2\",\"Title_en\",\"ElementName_en\"\n" );
219 while ( fgets ( lin,
CSV_MAXL,
f ) != NULL )
222 if ( (
c = strrchr ( lin,
'\n' ) ) != NULL )
232 ix = strtoul ( &lin[0], &
c, 10 );
234 printf (
"\"%s\",", desc.
c );
239 printf (
"\"%s\",,", caux );
244 printf (
"\"%s\",", caux );
247 il = strtol ( &lin[97], &
c, 10 );
248 printf (
"\"%ld\",", il );
251 il = strtol ( &lin[102], &
c, 10 );
252 printf (
"\"%ld\",", il );
255 il = strtol ( &lin[115], &
c, 10 );
256 printf (
"\"%ld\"\n", il );
263 if ( lin[12] !=
' ' && caux[0] )
265 printf (
"\"%s\",\"%u\",\"%s\",,,\n", caux2, ix, caux );
271 memcpy ( caux2, lin, 6 );
275 if ( lin[12] !=
' ' )
277 ix = strtol ( lin + 12, &
c, 10 );
278 strcpy ( caux, lin + 24 );
282 if ( lin[22] !=
' ' )
285 strcat ( caux, lin + 22 );
290 strcat ( caux, lin + 22 );
297 strcat ( caux, lin + 24 );
302 strcat ( caux, lin + 24 );
314 memcpy ( caux2, lin + 1, 6 );
318 memcpy ( caux, lin + 11, 6 );
320 printf (
"\"%s\",\"%s\",,\n", caux2, caux );
324 fprintf ( stderr,
"%s: Error, bad '%s' table type\n",
SELF,
TABLE_TYPE );
326 exit ( EXIT_FAILURE );
333 printf (
"\"%s\",\"%u\",\"%s\",,,\n", caux2, ix, caux );
339 exit ( EXIT_SUCCESS );
Include header file for bufrdeco library.
#define BUFR_EXPLAINED_LENGTH
Maximum length for a explained descriptor string.
int uint32_t_to_descriptor(struct bufr_descriptor *d, uint32_t id)
parse an integer with a descriptor fom bufr ECWMF libary
#define CSV_MAXL
Maximum length in a string to be parsed as csv.
char * bufr_charray_to_string(char *s, char *buf, size_t size)
get a null termitated c-string from an array of unsigned chars
int parse_csv_line(int *nt, char *tk[], char *lin)
Parse a csv line.
char * csv_quoted_string(char *out, char *in)
Transform a string to a quoted string to be inserted in a csv file.
char * bufr_adjust_string(char *s)
Supress trailing blanks of a string.
int main(int argc, char *argv[])