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

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    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
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    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
    Membre averti
    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
    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
    Membre averti
    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
    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
    Membre averti
    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
    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
    Membre averti
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2013
    Messages
    31
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2013
    Messages : 31
    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

+ 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