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 :

fichiers csv et langage C: compter le nombre des champs


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut fichiers csv et langage C: compter le nombre des champs
    j'ai écrit une fonction qui doit compter le nombre des champs dans une ligne d'un fichier .csv

    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
    static int field_count ( char* filename)
    {
    printf("Beginning of field_count() for the file : %s \n", filename);
    int nb_f = 0;
    int nb_fields ;
    //int nb_lignes;
    FILE* file_in;
    char c={0};
     
    file_in = fopen(filename, "r");
     
    if (file_in == NULL)
    {
        printf("ERROR: Impossible to open the temporary file %s in reading mode \n", filename );
        printf("ERROR CODE IS %d  \n", errno);
        exit (-1);
        return(0);
    }
    /* nb_fields contain the number of fields in a line  */
     
    while ((c!= EOF) && (c !='\n'))
    {
    c = getc(file_in);
    	   if (c ==',')
    	   {
    	   nb_f++;
    	   printf("the counter reached the value :%d \n",nb_f);
               }
     }
    printf("we finished the count, we will close the file");
    fclose (file_in);
    nb_fields = nb_f;
     
    printf("the number of fields is: %s \n",nb_fields);
    printf("end of field_count() \n \n ");
    return (nb_fields);
     
    }
    lors de l'exécution, elle m'affiche le message "the counter reached the value" 9 fois ensuite elle m'affiche Segmentation Fault

    le fichier sur lequel j'ai testé est:
    125895,A,8807,USER,TRD,1,PHO,314-955-5793 (CMO), ,
    125895,D,8807,USER,TRD,1,SWF, , ,
    125895,A,8807,USER,TRD,1,TLX, , ,

    pourquoi le segmentation fault????
    please i need help

  2. #2
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Par défaut
    Citation Envoyé par ensi_meriem Voir le message
    *pourquoi le segmentation fault????
    ll y a au moins un problème ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    printf("the number of fields is: %s \n",nb_fields);
    %s c'est pour les chaînes de caractères pas pour les int (%d).

  3. #3
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 835
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 835
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par ensi_meriem Voir le message
    j'ai écrit une fonction qui doit compter le nombre des champs dans une ligne d'un fichier .csv

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    while ((c!= EOF) && (c !='\n'))
    {
    c = getc(file_in);
    	   if (c ==',')
    	   {
    	   nb_f++;
    	   printf("the counter reached the value :%d \n",nb_f);
               }
     }
    Salut,
    gl a probablement mis le doigt sur la raison du SEG_FAULT. En effet, si tu demandes à printf() d'afficher un int au format %s, il utilisera cet int comme adresse ce qui est tout sauf une super bonne idée.

    De mon coté, j'ai détecté un bug dans ton algo. Parce qu'en dehors d'avoir une variable "nb_fields" absolument inutile, tu te bases sur la virgule pour détecter que tu as trouvé un champ. Mais dans la ligne "toto,titi,tata", tu as 2 virgules pour 3 champs !!!
    J'aurais plutôt vu ton algo ainsi:
    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    while ((c=fgetc(file_in)) != EOF)
    {
    	   if (c ==',' || c == '\n')
    	   {
    	   nb_f++;
    	   printf("the counter reached the value :%d \n",nb_f);
               }
     }
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  4. #4
    Membre averti
    Profil pro
    Étudiant
    Inscrit en
    Février 2010
    Messages
    32
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2010
    Messages : 32
    Par défaut
    meeeeeerci
    tu c j'ai révisé le code pluuuuuuuus qu'une fois et j'ai pas fais attention à printf d'un int avec %s
    merci bcp

Discussions similaires

  1. Compter le Nombre de champs dans un fichier
    Par _shuriken_ dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 14/02/2015, 22h03
  2. Compter le nombre des fichiers dans un dossier en serveur
    Par kamclasse dans le forum API standards et tierces
    Réponses: 8
    Dernier message: 03/02/2015, 12h00
  3. [XL-2007] MACRO pour compter le nombre des fichiers sur le serveur FTP
    Par kinkichin dans le forum Macros et VBA Excel
    Réponses: 0
    Dernier message: 04/07/2011, 18h09
  4. fichiers csv et langage C
    Par ensi_meriem dans le forum C
    Réponses: 1
    Dernier message: 18/05/2011, 15h52
  5. Compter le nombre de champs (cut ?)
    Par orafrance dans le forum Shell et commandes GNU
    Réponses: 5
    Dernier message: 08/05/2007, 13h46

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