Changeset 41305 for trunk/Ohana/src/opihi/cmd.data
- Timestamp:
- Mar 10, 2020, 10:52:25 AM (6 years ago)
- File:
-
- 1 edited
-
trunk/Ohana/src/opihi/cmd.data/read_vectors.c (modified) (8 diffs)
Legend:
- Unmodified
- Added
- Removed
-
trunk/Ohana/src/opihi/cmd.data/read_vectors.c
r41269 r41305 35 35 36 36 // vector types 37 enum {COLTYPE_NONE, COLTYPE_FLT, COLTYPE_INT, COLTYPE_TIME, COLTYPE_ CHAR, COLTYPE_STR};37 enum {COLTYPE_NONE, COLTYPE_FLT, COLTYPE_INT, COLTYPE_TIME, COLTYPE_DATE, COLTYPE_CHAR, COLTYPE_STR, COLTYPE_HMS}; 38 38 39 39 static int Nvec = 0; … … 91 91 gprint (GP_ERR, " -skip N : skip N lines before reading\n"); 92 92 gprint (GP_ERR, " column names may include a type: name:type\n"); 93 gprint (GP_ERR, " type is int, float, char, str, time \n");93 gprint (GP_ERR, " type is int, float, char, str, time, date, hms\n"); 94 94 gprint (GP_ERR, " for char, values are placed into a list $name:0 - $name:n\n"); 95 95 gprint (GP_ERR, " for str, values are placed into a string-typed vector\n"); 96 gprint (GP_ERR, " for hms, values are sexigesimal values HH:MM:SS (good for degrees as well)\n"); 97 gprint (GP_ERR, " for date, values are human-readable date strings YYYY/MM/DD\n"); 96 98 gprint (GP_ERR, " for time, values are human-readable date/time strings YYYY/MM/DD,hh:mm:ss\n"); 97 gprint (GP_ERR, " the resulting vector is a float based on the TIMEFORMAT, TIMEREF values\n");99 gprint (GP_ERR, " date & time values are stored as a float using the TIMEFORMAT, TIMEREF values for the conversion\n"); 98 100 99 101 gprint (GP_ERR, " -fits options:\n"); … … 154 156 if (!strcasecmp(ptr, "char")) { coltype[i] = COLTYPE_CHAR; } 155 157 if (!strcasecmp(ptr, "str")) { coltype[i] = COLTYPE_STR; } 158 if (!strcasecmp(ptr, "date")) { coltype[i] = COLTYPE_DATE; } 156 159 if (!strcasecmp(ptr, "time")) { coltype[i] = COLTYPE_TIME; } 160 if (!strcasecmp(ptr, "hms")) { coltype[i] = COLTYPE_HMS; } 157 161 if (!coltype[i]) goto bad_colname; 158 162 } … … 212 216 break; 213 217 case COLTYPE_FLT: 218 case COLTYPE_HMS: 214 219 case COLTYPE_TIME: 215 // note that COLTYPE_TIME is a type of float 220 case COLTYPE_DATE: 216 221 ResetVector (vec[i], OPIHI_FLT, NELEM); 217 222 break; … … 292 297 time_t tvalue; 293 298 int readStatus = FALSE; 299 int dataStatus = FALSE; 294 300 // need to make the if cases for coltype[i] 295 301 switch (coltype[i]) { … … 341 347 vec[i][0].elements.Flt[Nelem] = readStatus ? dvalue : NAN; 342 348 break; 349 case COLTYPE_DATE: { 350 char *string = NULL; 351 if (IsCSV) { 352 char *ptr = ptrparse_csv (col[i], c0); 353 string = strcreate (ptr); // create separate string (NULL-safe) 354 ptr = (string == NULL) ? NULL : strchr (string, ','); 355 if (ptr != NULL) *ptr = 0; // place an EOL here so parsing does not go past the comma 356 } else { 357 char *ptr = ptrparse (col[i], c0); // NULL-safe 358 string = getword (ptr); // NULL-safe 359 } 360 tvalue = ohana_date_to_sec (string); // NULL-safe (returns 0) 361 dvalue = TimeValue (tvalue, TimeReference, TimeFormat); 362 vec[i][0].elements.Flt[Nelem] = string ? dvalue : NAN; 363 FREE (string); 364 break; 365 } 366 case COLTYPE_HMS: { 367 char *ptr = IsCSV ? ptrparse_csv (col[i], c0) : ptrparse (col[i], c0); 368 char *string = strcreate (ptr); // make a copy so we can munge it in ohana_dms_to_ddd 369 dataStatus = ohana_dms_to_ddd (&dvalue, string); 370 vec[i][0].elements.Flt[Nelem] = ((string != NULL) && dataStatus) ? dvalue : NAN; 371 FREE (string); 372 break; 373 } 343 374 } 344 375 if (!readStatus && VERBOSE) { … … 366 397 break; 367 398 case COLTYPE_FLT: 399 case COLTYPE_HMS: 368 400 case COLTYPE_TIME: 401 case COLTYPE_DATE: 369 402 ResetVector (vec[i], OPIHI_FLT, NELEM); 370 403 break; … … 390 423 break; 391 424 case COLTYPE_FLT: 425 case COLTYPE_HMS: 392 426 case COLTYPE_TIME: 427 case COLTYPE_DATE: 393 428 ResetVector (vec[i], OPIHI_FLT, Nelem); 394 429 break;
Note:
See TracChangeset
for help on using the changeset viewer.
