static inline void wbExportCSV_setFile(wbExportCSV_t csv, const char *path) { if (csv != NULL) { if (wbExportCSV_getFile(csv) != NULL) { wbFile_delete(wbExportCSV_getFile(csv)); } if (path != NULL) { wbExportCSV_getFile(csv) = wbFile_open(path, "w+"); } else { wbExportCSV_getFile(csv) = NULL; } } return; }
static inline void wbExportCSV_write(wbExportCSV_t csv, void *data, int rows, int columns, char sep, wbType_t type) { int ii, jj; wbFile_t file; FILE *handle; char seperator[2]; if (csv == nullptr || wbExportCSV_getFile(csv) == nullptr) { return; } file = wbExportCSV_getFile(csv); handle = wbFile_getFileHandle(file); if (handle == nullptr) { return; } if (sep == '\0') { seperator[0] = ','; } else { seperator[0] = sep; } seperator[1] = '\0'; for (ii = 0; ii < rows; ii++) { for (jj = 0; jj < columns; jj++) { if (type == wbType_integer) { int elem = ((int *)data)[ii * columns + jj]; fprintf(handle, "%d", elem); } else if (type == wbType_ubit8) { int elem = ((unsigned char *)data)[ii * columns + jj]; fprintf(handle, "%d", elem); } else { wbReal_t elem = ((wbReal_t *)data)[ii * columns + jj]; fprintf(handle, "%f", elem); } if (jj == columns - 1) { fprintf(handle, "\n"); } else { fprintf(handle, "%s", seperator); } } } return; }
static inline wbExportCSV_t wbExportCSV_new(void) { wbExportCSV_t csv; csv = wbNew(struct st_wbExportCVS_t); wbExportCSV_getFile(csv) = NULL; wbExportCSV_setColumnCount(csv, -1); wbExportCSV_setRowCount(csv, -1); wbExportCSV_setSeperator(csv, '\0'); return csv; }