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


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
    salut tout le monde
    je veux compter le nombre des lignes dans un fichier csv ensuite je veux calculer le nombre des champs par ligne
    j'ai fait une fonction qui compte le nbre des lignes:

    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
    static int line_count ( char *filename)
    {
     
    printf("beginning of line_count() for the file: %s \n",filename);
    trace("beginning of line_count() \n");
     
    int nb_l = 0;
    int nb_lines ;
    char c={0};
     
    FILE* file_in; /* stream associated to filename */
    file_in = fopen (filename, "r");
     
    if (file_in == NULL)
    {
        printf("ERROR: Impossible to open the file %s \n", filename);
        printf("ERROR CODE IS %d \n", errno);
     
        exit (-1);
        return(0);
    }
     
    /* nb_lines contains the number of lines in the file */
     
    while ((c=getc(file_in)) != EOF)
    {
    if ((c=getc(file_in)) =='\n')
      {
          nb_l++;
          printf("the counter reached the value : %s \n",nb_l);
      }
    }
    print("we finishe the count of lines, we will close the file");
    fclose (file_in);
    nb_lines = nb_l+1;
     
    printf("number of lines is %d \n", nb_lines);
    printf("end of the function line_count() \n \n");
     
    return (nb_lines);
    ensuite j'ai fait une fonction qui va calculer le nombre des champs dans une ligne,
    cette fonction fait appel à la fonction qui compte le nombre des lignes.

    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
    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};
     
    printf("we will count the number of lines first in the file : %s \n", filename);
    nb_lignes = line_count(filename);
     
    if (nb_lignes == 0)
    {
      printf("the file %s did not contain any line \n",filename);
      return(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=getc(file_in)) != EOF)
    {
    printf("while we did not reached the EOF \n");
     
     while ((c=getc(file_in)) != '\n')
     {
       if ((c=getc(file_in)) ==',')
       {
       printf("we increment the counter when we meet a comma \n");
         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+1;
     
    printf("the number of fields is: %s \n",nb_fields);
    printf("end of field_count() \n \n ");
     
    return (nb_fields);
     
    }
    je ne sais pas pourquoi dans cette 2éme fonction la boucle while boucle à l'infini
    en plus la première fonction line_count m'affiche toujours 1 malgé que j'ai fait passé un fichier qui contient trois lignes

  2. #2
    Membre régulier
    Homme Profil pro
    Inscrit en
    Mai 2011
    Messages
    10
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mai 2011
    Messages : 10
    Par défaut
    hmmm...
    d'apres ton code il y a plus ou moins une erreur dans la deuxième partie.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    while (car != EOF)
    {
        while (car != \n)
        {
         ...
        }
    }
    Donc en simplifié c'est ce qu'il y a.
    Et si ta derniere ligne du fichier csv ne contient pas de '\n', le programme boucle à l'infini.

    La boucle incrusté dans la premiere boucle cherchera toujours '\n' et quand EOF arrivera il sera bloqué dans la 2eme boucle. Donc ton programme boulcera à l'infini.

    Donc modifie ta deuxième boucle en mettant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    while (car != EOF)
    {
        while (car != \n && car != EOF )
        {
        ....
        }
    }
    Ton programme ne bouclera plus à l'infini, et le tour est joué

    Tu vois?

Discussions similaires

  1. Réponses: 2
    Dernier message: 31/05/2011, 16h09
  2. Réponses: 3
    Dernier message: 23/05/2011, 09h53
  3. Mise à jour d'une table avec un fichier csv
    Par blackangel dans le forum PostgreSQL
    Réponses: 4
    Dernier message: 26/05/2005, 14h46
  4. Sortir un fichier csv sur base d une requete
    Par Freeman_80 dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 12/01/2005, 11h21
  5. Réponses: 2
    Dernier message: 14/05/2004, 12h55

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