Exemple #1
0
// CSV to Qucs conversion.
int csv2qucs (struct actionset_t * action, char * infile, char * outfile) {
  int ret = 0;
  csv_init ();
  if ((csv_in = open_file (infile, "r")) == NULL) {
    ret = -1;
  } else if (csv_parse () != 0) {
    ret = -1;
  } else if (csv_check () != 0) {
    ret = -1;
  }
  csv_lex_destroy ();
  if (csv_in)
    fclose (csv_in);
  if (ret) {
    csv_destroy ();
    return -1;
  }

  if (!strcmp (action->out, "qucsdata")) {
    csv_result->setFile (outfile);
    qucsdata_producer (csv_result);
  }
  csv_destroy ();
  return 0;
}
Exemple #2
0
struct csv_resultarray *
csv_parse(int fd)
{
    int result;
    struct csv_resultarray *results = NULL;
    result = lseek(fd, 0, SEEK_SET);
    if (result) {
        result = DBELSEEK;
        DBLOG(result);
        goto done;
    }
    FILE *file;
    TRYNULL(result, DBEIONOFILE, file, fdopen(fd, "r"), done);
    TRYNULL(result, DBENOMEM, results, csv_resultarray_create(), cleanup_file);

    char buf[BUFSIZE];
    bzero(buf, BUFSIZE);
    char c;
    unsigned ix = 0;
    while ((c = fgetc(file)) != EOF) {
        if (c == '\n' || c == ',') {
            buf[ix] = '\0';
            struct csv_result *header;
            TRYNULL(result, DBENOMEM, header, malloc(sizeof(struct csv_result)), free_csv_resultarray);
            TRYNULL(result, DBENOMEM, header->csv_vals, intarray_create(), free_csv_resultarray);
            TRY(result, csv_resultarray_add(results, header, NULL), free_csv_resultarray);
            strcpy(header->csv_colname, buf);
            ix = 0;
            bzero(buf, BUFSIZE);
            if (c == '\n') {
                break;
            }
        } else {
            buf[ix++] = c;
        }
    }
    if (c == EOF) {
        result = DBEIOEARLYEOF;
        DBLOG(result);
        goto free_csv_resultarray;
    }

    // loop until we have no more rows
    ix = 0;
    unsigned colnum = 0;
    while ((c = fgetc(file)) != EOF) {
        if (c == '\n' || c == ',') {
            buf[ix] = '\0';
            int val = atoi(buf);
            struct csv_result *header = csv_resultarray_get(results, colnum);
            TRY(result, intarray_add(header->csv_vals, (void *) val, NULL), free_csv_resultarray);
            ix = 0;
            bzero(buf, BUFSIZE);
            if (c == '\n') {
                colnum = 0;
            } else {
                colnum++;
            }
        } else {
            buf[ix++] = c;
        }
    }
    // success
    goto cleanup_file;

  free_csv_resultarray:
    csv_destroy(results);
    results = NULL;
  cleanup_file:
    assert(fclose(file) == 0);
  done:
    return results;
}