IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Lecture des lignes d'un fichier csv avec un code C


Sujet :

C

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut Lecture des lignes d'un fichier csv avec un code C
    Bonjour, je suis débutant en C et je veux lire les données d'un fichier csv j'ai fait un programme qui lit la première ligne "cependant je veux lire toute les lignes de ce fichier qui contient des données de température en fonction du temps.Le mieux c'est d’assigner un indice ou un pointeur ( je ne sais pas je suis débutant ) parce que je compte réutiliser les différentes valeurs lues ( en les enregistrant par exemple) afin de déterminer les maximums de température au cours du temps et en comparées certaines . " Quelqu'un pourrait-il m'aider s'il vous plait à déjà à lire toutes les valeurs de mon fichier csv ? Merci beaucoup.

    Vous trouverez dans cet email mon fichier test2.c qui lit la première ligne du fichier.csv

    Voici les 10 premières lignes du fichier.csv

    0;25.097406;24.851028;24.4375;24.5
    2;25.138475;24.851028;24.4375;24.5
    4;25.11794;24.871557;24.4375;24.46875
    6;25.097406;24.871557;24.4375;24.46875
    8;25.11794;24.851028;24.4375;24.46875
    10;25.11794;24.851028;24.40625;24.46875
    12;25.097406;24.851028;24.40625;24.46875
    14;25.097406;24.851028;24.40625;24.46875
    16;25.11794;24.851028;24.40625;24.46875
    18;25.11794;24.851028;24.40625;24.4375
    Fichiers attachés Fichiers attachés

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Bonjour,

    si ton code fonctionne pour la première ligne, il te suffit de remplacer ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if ((fgets (buff, BUFF_SIZE, file)) != NULL)
          {
              [...]
          }
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while ((fgets (buff, BUFF_SIZE, file)) != NULL)
          {
              [...]
          }
    car ton dernier fgets renverra null car il sera a la fin du fichier (fgets comme fgetc avance dans le fichier)


    edit : bien sur il faut que ton traitement dans la boucle soit enregistré à chaque fois dans une nouvelle variable

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    infos = malloc (sizeof (* infos));
    sizeof (*var) renvoie la taille de l'adresse de ta variable 'var' , il faut mettre sizeof(infos) pour avoir la taille de la variable
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    infos = (temperature_infos*)malloc (sizeof ( infos));
    avec le cast car malloc renvoir un (void*)

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Merci beaucoup pour votre réponse rapide j'ai changer les lignes de code correspondante
    mais a chaque fois que je compile cela marche mais le test.exe arrête de fonctionner .

    Vous trouverez le nouveaux fichier.c et le message d'erreur en JPG.

    Merci beaucoup encore.
    Images attachées Images attachées  
    Fichiers attachés Fichiers attachés

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Cependant entre temps j'ai fait une autre fonction qui essaye de faire la même chose, sauf que cette fois c,i il lis toute les valeurs mais il ne reconnait pas le caractère ";" qui montre le début d'un autre mot.

    Donc j'ai mis en commentaire les parties de code que j'ai essayé de faire pour qu'il reconnaisse le point virgule comme délimiteur, Afin que vous puissiez le compiler et comprendre ce dt je parle le fichier.csv reste le même et le but est le même.
    Fichiers attachés Fichiers attachés

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Nouvelle compilation avec g++ le même fichier test2.c avec les modifications on a
    Images attachées Images attachées  

  6. #6
    Nouveau membre du Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    Points : 37
    Points
    37
    Par défaut
    Citation Envoyé par n.x.b.c Voir le message
    Nouvelle compilation avec g++ le même fichier test2.c avec les modifications on a

    deco en voulant previsualiser lol ... je vais te repondre par etape tan pis peut être que tu y arrivera avant que je decortique tout xD

    deja :

    Pour le lign par ligne, pour moi, la meilleur methode est d'utiliser fgets de la maniere suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
     
    fichier = fopen ("fichier.csv", "r");		  	// recuperation du fichier autoclave.csv
    		if (fichier!= NULL){
     
    		ligne = fgets(buffer, BUFF_SIZE-1, fichier)			// pas obligé de mettre -1 c une securité supplementaire
    												//  pour le fameux  buffer overflow
     
    			resultat = traitment(ligne);
     
    			ou
     
    			traitment(ligne, adresse_resultat);
     
    		}	
    		else 
    		{ 
    			printf( " Le Fichier est vide ou n'existe pas ") ; 
    		}	
            fclose(fichier);
    ensuite le langage c doit toujours savoir exactement ce qu'il manipule

    malloc revoie du (void*) il faut toujours caster le retour sauf si tu utilise du (void*) tel quel evidemment mais c'est plutot rare avec malloc il me semble bref :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    dup = (char*)malloc(...);

    Ajout :

    Pour la fonction de traitement :

    je te conseille de creer ta structure a chaque fois et de la retourner
    pour ensuite l'enregistrer et continuer a l'utiliser par la suite

    comme ton format de ligne est simple, une boucle qui copie en s'arretant au ';' est plus appropriée

    je te propose quelque chose dans le genre la :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
     
     
    function temperatrue_infos* traitement(char* ligne)
    {
    	char buffer[20], c;
    	int k = 0;
     
    	temperature_infos* resultat = (temperature_infos*)malloc(sizeof(temperature_infos));
     
    	for (t=0; t<5; t++)
    	{
    		k = 0;
    		while (*ligne != ';')
    		{
    			buffer[k++] = *(ligne++);
    		}
    		buffer[k] = '\0';
                    ligne++;
     
    		switch(t)
    		{
    			case 0:
    			resultat->Time = str_dup(buffer);
     
    			case 1:
    			resultat->pt10001 = str_dup(buffer);
     
    			case 2:
    			resultat->pt10002 = str_dup(buffer);
     
    			case 3:
    			resultat->temp1 = str_dup(buffer);
     
    			case 4:
    			resultat->temp2 = str_dup(buffer);
     
    		}
     
    	}
    	return resultat;
    }
    avec les break ca sera bien aussi

  7. #7
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    g++ est pour le C++, pour le C, la commande c'est gcc.
    Le cast du void* est en effet obligatoire en C++, pas en C où il est parfaitement autorisé.

  8. #8
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour, je reviens a vous parce que votre aide m'as était d'une utilité très précieuse et importante j'ai repris les lignes votre code et j'ai fait 2 programmes qui font la même chose mais le seul problème quand je compile le fichier.exe et je n'obtient rien en réponse par contre si je change le nom du fichier j'ai bien le printf qui dit Le fichier est vide ou n'existe pas. Je vous rappel mon problème qui était de lire un fichier csv , afficher et d'enregistrer les valeurs obtenues afin de les comparer et travailler sur ces valeurs. Vous trouverez une photo indiquant l'erreur dont je parle

    Nom : Capture01.JPG
Affichages : 1843
Taille : 45,7 Ko

    et les deux fichiers point C.

    test3.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
     
    //#define DELIM        ";"
    #define BUFF_SIZE    128
    FILE * fichier = NULL;
     
    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 = (char*)malloc(size);
     
          if (dup != NULL)
          {
             memcpy (dup, str, size);
          }
       }
     
     
       return dup;
    }
     
    static temperature_infos * get_temp (const char * filename)
    {
     
    char  buffer [BUFF_SIZE];
    char * ligne = NULL;
     
    int t;
    fichier = fopen (filename , "r");		  	// recuperation du fichier autoclave.csv
    if (fichier!= NULL)
    { 
    		ligne = fgets(buffer, BUFF_SIZE-1, fichier);	// pas obligé de mettre -1 c une securité supplementaire pour le fameux  buffer overflow
    		char buffer[20], c;
    		int k = 0;
    		while ((fgets (buffer, BUFF_SIZE, fichier)) != NULL)
    		{
        temperature_infos * resultat = ((temperature_infos*)malloc(sizeof(temperature_infos)));
    			for (t=0; t<5; t++)
    		{
    			k = 0;
    			while (*ligne != ';')
    			{
    			buffer[k++] = *(ligne++);
    			}
    			buffer[k] = '\0';
    				 ligne++;
     
    			switch(t)
    			{
    				case 0:
    				resultat->Time = str_dup(buffer);
    				break;
     
    				case 1:
    				resultat->pt10001 = str_dup(buffer);
    				break;
     
    				case 2:
    				resultat->pt10002 = str_dup(buffer);
    				break;
     
    				case 3:
    				resultat->temp1 = str_dup(buffer);
    				break;
     
    				case 4:
    				resultat->temp2 = str_dup(buffer);
    				break;
     
    				}
     
    			}
    			return resultat;
    		}
    }
    }
    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 * resultat = get_temp ("fichier.csv");
       if (resultat != NULL)
    	{
    		 printf (
    			  "Time(sec): %s\nPT10001(Celsius): %s\nPT10002(Celsius): %s\nTemp1(Celsius): %s\nTemp2(Celsius):%s\n",
    			  resultat->Time, resultat->pt10001, resultat->pt10002, resultat->temp1, resultat->temp2
    	    );
     
          free_temperature_infos (& resultat);
       }
       else 
       {
    	   printf ( "\n Le fichier est vide \n" ); 
       }
    fclose(fichier);
     
    return EXIT_SUCCESS ;
    }
    affichage.c
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    #include <stdio.h>
    #include <stdlib.h>
    #include <string.h>
     
    #define DELIM        ";"
    #define BUFF_SIZE    128
     
    static char * str_dup (const char * str)
    {
       char * dup = NULL;
     
       if (str != NULL)
       {
          size_t size = strlen (str) + 1;
          dup = (char*)malloc (size);
     
          if (dup != NULL)
          {
             memcpy (dup, str, size);
          }
       }
     
      return dup;
    }
     
    typedef struct
    {
       char *   Time;
       char *   pt10001;
       char *   pt10002;
       char *   temp1;
       char *   temp2;
    }
    temperature_infos;
    typedef enum
    {
       TIME,
       PT10001,
       PT10002,
       TEMP1,
       TEMP2,
     
       NB_TYPE
    }
    infos_type;
    int main (void)
    {
     
            FILE * fichier ;
    		const char time;
    		const char pt10001; 
    		const char pt10002; 
    		const char temp1; 
    		const char temp2 ;
    		// char traitement= NULL;
    		int c ;
    		//char * pointeur = NULL ;
    		int t ;
            char buffer[20];
            char *ligne ;
     
            fichier = fopen ("fichier.csv", "r");		  	// recuperation du fichier autoclave.csv
    		if (fichier!= NULL)
    		{
    			ligne = fgets(buffer, BUFF_SIZE-1, fichier);
    			/**********************************************************************************
                            //int i ;
                             //temperature_infos  *  infos = NULL;
                            //for (c = fscanf(fichier, "%s,%s,%s,%s,%s",&time, &pt10001, &pt10002, &temp1, &temp2) ;c!=EOF ; c++) // on lit le fichier  tant qu'il ya quelque chose à lire.
                            //{   
                            // while ((pointeur = strtok (p, DELIM)) != NULL){
                                    /*******************************************************/
     
    	//function temperature_infos * traitement(const char* ligne)
    	//{
    	char buffer[20], c;
    	int k = 0;
     
    	temperature_infos * resultat = (temperature_infos*)malloc(sizeof(temperature_infos));
     
    	for (t=0; t<5; t++)
    	{
    		k = 0;
    		while (*ligne != ';')
    		{
    			buffer[k++] = *(ligne++);
    		}
    		buffer[k] = '\0';
                    ligne++;
     
    		switch(t)
    		{
    			case 0:
    			resultat->Time = str_dup(buffer);
    			break;
     
    			case 1:
    			resultat->pt10001 = str_dup(buffer);
    			break;
     
    			case 2:
    			resultat->pt10002 = str_dup(buffer);
    			break;
     
    			case 3:
    			resultat->temp1 = str_dup(buffer);
    			break;
     
    			case 4:
    			resultat->temp2 = str_dup(buffer);
    			break;
     
    		}			
            printf("Les Données sont :\n Time: %s\n Pt10001:%s\n Pt10002:%s\n Temp1: %s\n Temp2: %s\n" ,&time, &pt10001, &pt10002, &temp1, &temp2); 
    		}
    }
    else 
    		{ 
    			printf( " Le Fichier est vide ou n'existe pas "); 
    		}	
            fclose(fichier);
     
    		return EXIT_SUCCESS ;
    }
    Merci beaucoup encore Cordialement.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Rappel


    Voici les 10 premières lignes du fichier.csv


    0;25.097406;24.851028;24.4375;24.5
    2;25.138475;24.851028;24.4375;24.5
    4;25.11794;24.871557;24.4375;24.46875
    6;25.097406;24.871557;24.4375;24.46875
    8;25.11794;24.851028;24.4375;24.46875
    10;25.11794;24.851028;24.40625;24.46875
    12;25.097406;24.851028;24.40625;24.46875
    14;25.097406;24.851028;24.40625;24.46875
    16;25.11794;24.851028;24.40625;24.46875
    18;25.11794;24.851028;24.40625;24.4375

  10. #10
    Invité
    Invité(e)
    Par défaut
    • Fais attention à ton indentation qui n'est pas toujours correcte.
    • Dans les deux cas, tu déclares un tableau de 20 char alors que veux en écrire 128 !
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      #define BUFF_SIZE    128
      char buffer[20];
      fgets(buffer, BUFF_SIZE-1, fichier)
    • Compilant dorénavant bien en C, le cast est inutile :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      temperature_infos * resultat = (temperature_infos*)malloc(sizeof(temperature_infos));
    • Dans affichage.c, supprime les & de cette ligne (avec fscanf() c'est bon, mais pas avec printf()) :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      printf("Les Données sont :\n Time: %s\n Pt10001:%s\n Pt10002:%s\n Temp1: %s\n Temp2: %s\n" ,&time, &pt10001, &pt10002, &temp1, &temp2);
      Par contre ces variables ne sont jamais affectées, ce sont les champs de resultat qui le sont.
    • Dans test3.c, tu ne fais que lire une ligne pour l'instant :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      5
      6
      7
      8
      9
      while ((fgets (buffer, BUFF_SIZE, fichier)) != NULL)
      {
          temperature_infos * resultat = ((temperature_infos*)malloc(sizeof(temperature_infos)));
          for (t=0; t<5; t++)
          {
              // ...
          }
          return resultat
      }
      Et que retournes-tu si fichier est NULL ?
    • Qu'en est-il du dernier élément de chaque ligne qui n'est pas suivi de ';' ?
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      1
      2
      3
      4
      while (*ligne != ';')
      {
          buffer[k++] = *(ligne++);
      }
      strtok() que tu as tenté d'utiliser est bien ce qu'il te faut


    Concernant le message que tu as, vérifie que le fichier est bien présent dans le dossier C:\Users\Xavier\Desktop\test et que son nom est correct.

  11. #11
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Bonjour,
    merci encore pour votre aide a tous. Que pensez vous de ce bout de code

    test5.c

    mais j'ai toujours une erreur qui persiste soit disant que "infos" n'est pas déclaré ce n'est pas une erreur pas aussi importante mais j'aimerais bien en détecter l'origine avant de faire n'importe quoi et m’embrouiller encore plus.

    Nom : Capture4.JPG
Affichages : 1916
Taille : 125,1 Ko

    Je vous rappel mon problème qui est de lire toutes lignes d'un fichier.csv, afficher et d'enregistrer les valeurs obtenues afin de les comparer et travailler sur ces valeurs. J'espère pouvoir marquer que ce problème a été résolu une fois que le code m'affichera toutes les valeurs de mon fichier csv sur le terminal.
    Merci encore.

  12. #12
    Futur Membre du Club
    Homme Profil pro
    Stagaire en dev
    Inscrit en
    Mai 2014
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Stagaire en dev
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Mai 2014
    Messages : 20
    Points : 9
    Points
    9
    Par défaut
    Les Warnings sont inutiles

    Nom : Capture4.JPG
Affichages : 1824
Taille : 191,3 Ko

  13. #13
    Invité
    Invité(e)
    Par défaut
    Évite au maximum les variables globales. Tu fais un mélange horrible entre le passage en paramètre et la variable globale file.

    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
       FILE *  file = NULL;  
       if(openFile("Autoclave12.csv",file)==0){
    On penserait que c'est ce file que tu initialises dans la fonction openFile(), mais il n'en est rien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    int openFile(const char * filename, FILE * dest){
        file = fopen (filename, "r");
        if(file == NULL){
            return 0;
        }else{ 
            return 1;
        }
    }
    dest n'est jamais utilisé dedans, c'est la variable globale qui l'est, et même s'il l'était ce n'est qu'une copie du file dans le main.

    Et lorsque tu utilises la fonction get_temp(), tu passes le file qui n'a pas été initialisé !!

    char buff [BUFF_SIZE]; n'a pas non plus besoin d'être global. Déclare-le juste avant la ligne du while qui l'utilise.

    Pour ce qui est des erreurs, il faut savoir qu'en C ansi strict, les variables doivent être déclarées au tout début des blocs où elles sont utilisées, avant la première instruction. Ce qui n'est pas le cas ici de int nbLine ni temperature_infos * infos qui viennent après le if.

    Autre remarque :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while ((fgets (buff, BUFF_SIZE, file)) != NULL)
    {
        // ...
        infos = malloc (sizeof (* infos));
        // ...
        tabTemp[i] = *infos;
    }
    toutes ces allocations ne pourront jamais être libérées ainsi : tu ne gardes aucune trace de l'adresse de la zone allouée.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Extraire des lignes d'un fichier .csv
    Par cre31400 dans le forum Fortran
    Réponses: 5
    Dernier message: 27/11/2009, 13h56
  2. Supprimer des lignes d'un fichier lu avec StringBuffer
    Par blackhock dans le forum Général Java
    Réponses: 3
    Dernier message: 15/04/2009, 16h21
  3. Réponses: 14
    Dernier message: 16/07/2008, 11h47
  4. Extraire des données d'un fichier .csv avec C++
    Par cre31400 dans le forum C++Builder
    Réponses: 14
    Dernier message: 08/07/2008, 10h25
  5. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo