Exemple #1
0
int spline_read(const char* filename, spline_p spline) {
  int i, result;
  FILE* file;
  char buffer[1024];

  spline_segment_t segment;
  spline_init(spline);

  file = fopen(filename, "r");
  if (file == NULL)
    return -SPLINE_ERROR_FILE_OPEN;

  while (fgets(buffer, sizeof(buffer), file) != NULL) {
    if (buffer[0] != '#') {
      result = sscanf(buffer, "%lg %lg %lg %lg %lg",
        &segment.a,
        &segment.b,
        &segment.c,
        &segment.d,
        &segment.arg_width);

      if (result < 5) {
        fclose(file);
        return -SPLINE_ERROR_FILE_FORMAT;
      }

      spline_add_segment(spline, &segment);
    }
  }

  fclose(file);

  return spline->num_segments;
}
Exemple #2
0
int era_trajectory_read(const char* filename, era_trajectory_p trajectory) {
  int result;
  FILE* file;
  char buffer[16384];

  era_trajectory_init(trajectory);
  spline_p spline_a = (spline_p)trajectory;

  file = fopen(filename, "r");
  if (file == NULL)
    return -ERA_TRAJECTORY_ERROR_FILE_OPEN;

  while (fgets(buffer, sizeof(buffer), file) != NULL) {
    if (buffer[0] != '#') {
      spline_segment_t segment_a[sizeof(era_trajectory_t)/sizeof(spline_t)];
      double arg_width;

      int i, num_chars;
      char* buffer_pos = buffer;
      for (i = 0; i < sizeof(era_trajectory_t)/sizeof(spline_t); ++i) {
        result = sscanf(buffer_pos, "%lg %lg %lg %lg %n",
          &segment_a[i].a,
          &segment_a[i].b,
          &segment_a[i].c,
          &segment_a[i].d,
          &num_chars);
  
        if (result < 4) {
          fclose(file);
          return -ERA_TRAJECTORY_ERROR_FILE_FORMAT;
        }
        else
          buffer_pos += num_chars;
      }

      result = sscanf(buffer_pos, "%lg", &arg_width);

      if (result < 1) {
        fclose(file);
        return -ERA_TRAJECTORY_ERROR_FILE_FORMAT;
      }

      for (i = 0; i < sizeof(era_trajectory_t)/sizeof(spline_t); ++i) {
        segment_a[i].arg_width = arg_width;
        spline_add_segment(&spline_a[i], &segment_a[i]);
      }
    }
  }

  fclose(file);

  return spline_a[0].num_segments;
}