#include #include #include #define DELIM ";" #define BUFF_SIZE 128 typedef struct { char * Time; char * pt10001; char * pt10002; char * temp1; char * temp2; } temperature_infos; //int c ; typedef enum { TIME, PT10001, PT10002, TEMP1, TEMP2, NB_TYPE } infos_type; static char * str_dup (const char * str) { char * dup = NULL; if (str != NULL) { size_t size = strlen (str) + 1; dup = malloc (size); if (dup != NULL) { memcpy (dup, str, size); } } return dup; } static temperature_infos * get_temp (const char * filename) { temperature_infos * infos = NULL; FILE * file = NULL; char * token = NULL; char buff [BUFF_SIZE]; file = fopen (filename, "r"); if (file != NULL) { if ((fgets (buff, BUFF_SIZE, file)) != NULL) { char * p = buff; int i = 0; infos = malloc (sizeof (* infos)); if (infos != NULL) { while ((token = strtok (p, DELIM)) != NULL) { if (i == 0) p = NULL; switch (i) { case TIME: infos->Time = str_dup (token); break; case PT10001: infos->pt10001 = str_dup (token); break; case PT10002: infos->pt10002 = str_dup (token); break; case TEMP1: infos->temp1 = str_dup (token); break; case TEMP2: infos->temp2 = str_dup (token); break; default: break; } i++; } } } fclose (file); } return infos; } static void free_temperature_infos (temperature_infos ** p) { if (p != NULL && *p != NULL) { free ((*p)->Time); free ((*p)->pt10001); free ((*p)->pt10002); free ((*p)->temp1); free ((*p)->temp2); *p = NULL; } } int main (void) { temperature_infos * infos = get_temp ("fichier.csv"); if (infos != NULL) { printf ( "Time(sec): %s\nPT10001(Celsius): %s\nPT10002(Celsius): %s\nTemp1(Celsius): %s\nTemp2(Celsius):%s\n", infos->Time, infos->pt10001, infos->pt10002, infos->temp1, infos->temp2 ); free_temperature_infos (& infos); } return EXIT_SUCCESS; }