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 :

Blocage d'une lecture ligne par ligne d'un fichier texte


Sujet :

C

  1. #1
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut Blocage d'une lecture ligne par ligne d'un fichier texte
    Bonjour,

    J'ai un petit problème dans la lecture d'un fichier, je lis le fichier ligne par ligne avec fgets chaque ligne est mise dans une structure mais le programme se bloque et je ne comprend pas pourquoi.

    J'affiche les lignes lues et cela correspond à ma structure jusqu'au blocage du programme.

    Merci d'avance pour votre aide.

    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
     
    FILE *fBASE;
    struct BAM *BM;
    char cheminBase[150];
    strcpy(cheminBase,"chemin du fichier txt");
     
    fBASE = fopen(cheminBase,"rt");
    if ( fBASE == NULL)
    {
      printf(" Erreur ouverture Base %s : \n", cheminBase);
    }
    while ( fgets((char *)&BM,sizeof(BM) ,fBASE ) )
    {
          compteur++;
          printf("compteur:%i!\n", compteur);   
          printf("%.*s", sizeof(BM), &BM);
    }
    fclose(fBASE);

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Décembre 2011
    Messages
    1 255
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Décembre 2011
    Messages : 1 255
    Points : 2 627
    Points
    2 627
    Par défaut
    salut,

    il bloque à quel moment ? (valeur du compteur par rapport au nombre de linges, par ex)

    Pour ta boucle while, regarde de commentaire.

  3. #3
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Bonjour mala92,

    un exemple si mon fichier fait 5000 lignes, le programme se bloque avant la fin de la ligne 4997.

  4. #4
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Qu'est-ce que struct BAM pourrais-tu nous montrer où tu le défini?

    Sinon si j'ai bien compris ton programme va se "bloquer" au niveau de la 12 ème ligne de ton programme quand tu lira l'une des dernières ligne de ton fichier?

    Ou est-ce que tu sors de ta boucle quand tu arrive à l'une des dernières ligne de ton fichier ?

  5. #5
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Voici la structure:

    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
     
    struct BAM
    {
         char V1         [32];
         char V2         [32];
         char V3         [32]; 
         char V4         [32];
         char V5         [32]; 
         char V6         [ 5];
         char V7         [ 1];  
         char V8         [26];  
         char V9         [1];
         char V10       [1]; 
         char V11       [3];
         char V12       [8];  
         char V13       [1];   
         char V14       [3];
         char V15       [5];  
         char V16       [5];  
         char V17       [5]; 
         char V18       [ 1];  
         char V19       [12];   
         char V20       [20];
         char V21       [ 5];  
         char V22       [32]; 
         char V23       [32]; 
         char V24       [ 1];
         char V25       [132];  
    };
    Dans le cas d'un fichier de 5000 lignes, il va lire 4997 lignes (compteur et affichage de chaque ligne a l'appui) et il se bloque comme si il avait une pause ou qu'il ne trouvait pas la fin de fichier, il ne sort pas du while.

  6. #6
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    J'ai du mal à comprendre l'intérêt d'une telle structure.

    Sinon es-tu sûr que ton fichier soit bien fini d'écrire quand tu essayes de le lire? (que tu ais bien fait le fclose avant de le rouvrir en lecture)
    Est-ce que la ligne qui bloque a quelque chose de particulier que les autres lignes n'ont pas?
    As-tu essayé de mettre cette ligne en premier?

  7. #7
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Au départ le programme utilisait les différents champs de la structure qui me permettait de gérer mes champs un à un si j'ai des contrôle a faire dessus.

    Au niveau du fichier si je le réduit a 1000 lignes le programme se bloque au niveau de la ligne 989, donc a priori ce n'est pas une question de fichier.

  8. #8
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Si tu veux gérer tes champs un à un, ne vaut-il mieux pas leur donner des noms explicites?
    En plus il faudra faire attention car tous tes champs seront des tableaux de caractères sauf le dernier qui sera une chaîne de caractère (terminé par '\0').

    De plus, je ne suis pas sûr que tes champs aient pour but d'être lu et modifié par un utilisateur, dans ce cas là, pourquoi ne pas utiliser des fichiers binaires? Tu pourrais alors déterminer la taille de ton fichier et remplir un tableau de struct BAM avec un seul appel à fread.

    Quand tu as testé avec 1 000 lignes, comment as-tu généré ton fichier?

  9. #9
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Dans ma structure de départ effectivement les champs étaient nommés différemment mais pour simplifier j'ai changer les noms.

    Si je passe par un fread il faut que je sache d'avance le nombre de ligne de mon fichier enfin il me semble, hors ce n'est pas le cas.

    et sinon pour le fichier de 1000 lignes je l'ai créé avec un head simple.

  10. #10
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    De plus c'est le genre de méthode que j'utilises assez régulièrement mais je n'ai encore jamais eu ce type de problème.

  11. #11
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Je ne voie pas l'intérêt de placer une chaine de caractère dans un pointeur :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    struct BAM *BM;
    ....
    ...fgets((char *)&BM,sizeof(BM) ,fBASE )...
    N'est ce pas plutôt :

  12. #12
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    Oui c'est bien
    juste une petite erreur de retranscription.

  13. #13
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 31
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 136
    Points
    23 136
    Par défaut
    Citation Envoyé par marty2601 Voir le message
    Si je passe par un fread il faut que je sache d'avance le nombre de ligne de mon fichier enfin il me semble, hors ce n'est pas le cas.
    Avec stat tu peux obtenir la taille de ton fichier et ainsi déterminer le nombre de lignes.

    Citation Envoyé par marty2601 Voir le message
    et sinon pour le fichier de 1000 lignes je l'ai créé avec un head simple.
    head simple, ie ?
    Tu ne l'as pas écris à la main, montre nous le code que tu utilises pour générer ton fichier.

  14. #14
    Nouveau Candidat au Club
    Inscrit en
    Juillet 2012
    Messages
    8
    Détails du profil
    Informations forums :
    Inscription : Juillet 2012
    Messages : 8
    Points : 1
    Points
    1
    Par défaut
    C'est un fichier que j'utilise avec d'autres programmes et qui ne pose aucun problème, je ne le créé pas ce fichier.

Discussions similaires

  1. Lecture d'une matrice ligne par ligne
    Par bab33 dans le forum Simulink
    Réponses: 8
    Dernier message: 04/08/2014, 10h20
  2. lire une base de donnee ligne par ligne
    Par thildouille dans le forum Langage
    Réponses: 9
    Dernier message: 03/06/2011, 00h50
  3. Réponses: 8
    Dernier message: 18/07/2010, 21h16
  4. Réponses: 12
    Dernier message: 14/05/2008, 17h15
  5. Réponses: 3
    Dernier message: 16/10/2007, 20h45

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