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 :

problème de lecture d'un fichier texte avec des nombres


Sujet :

C

  1. #1
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut problème de lecture d'un fichier texte avec des nombres
    Bonjour à tous!
    Je voudrais copier les données d'un fichier texte dans un tableau que je pourrais ensuite utiliser dans mon programme.
    Quand j'écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    double donnees[10];
    File *fichier;
    fichier=fopen("test.txt","rb+");
    fread(donnees,sizeof(donnees),1,fichier);
    fclose(fichier);
    il compile mais à l'éxécution j'ai un segmentation fault!!
    je suis ouverte à toutes propositions!

  2. #2
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 366
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 366
    Points : 5 382
    Points
    5 382
    Par défaut
    Essaie de debugger par toi-même pour savoir qui fait ce seg fault.

    Tu es sous Linux, donc utilise le printf.
    Par ex, tu peux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fichier=fopen("test.txt","rb+");
    printf("fichier %p\n", fichier);
    si ca vaut 0, c'est peut-être que test.txt n'est pas accessible (pas au bout endroit ?)

  3. #3
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Effectivement ça ne donne pas 0!!maintenant je n'ai plus de segmentation fault mais quand je fais:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("%lf",donnees[0])
    ça me donne 0 alors que j'aurais du avoir 90!
    Aussi dans mon fichier texte,comment dois je présenter les nombres pour qu'il les comprenne?(à la suite avec \n ou en tabulation)

  4. #4
    Membre chevronné
    Profil pro
    Inscrit en
    Août 2006
    Messages
    1 104
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 1 104
    Points : 1 750
    Points
    1 750
    Par défaut
    Tu parles d'un fichier texte, mais non seulement tu l'ouvres en mode binaire et en plus tu remplis un tableau de double à la volée.

    En outre, il faut TOUJOURS vérifier la valeur retour de fopen avant d'utiliser une quelconque fonction de lecture ou d'écriture.

  5. #5
    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
    Ton code ne lit pas un fichier texte mais un fichier binaire. Cela suppose que dans ton fichier les doubles sont codés exactement comme ils le sont en mémoire dans le programme.

    Si tu as un fichier texte, tu dois le lire avec des fonctions assurant la conversion "représentation texte" -> "représentation binaire" comme fscanf()

  6. #6
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    j'ai mis fscanf à la place de fread!le problème c'est qu'il ne lit pas les valeurs suivantes c'est à dire si dans mon fichier texte j'ai :
    90
    170
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    fscanf(fichier,"%lf\n,%lf\n",&B,&A);
    il ne lit que 90.

  7. #7
    Membre actif Avatar de brachior
    Homme Profil pro
    Doctorant
    Inscrit en
    Mai 2011
    Messages
    190
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Seine et Marne (Île de France)

    Informations professionnelles :
    Activité : Doctorant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mai 2011
    Messages : 190
    Points : 293
    Points
    293
    Par défaut
    Je dit ça à tout hasard (je n'ai pas de machine pour tester ici ^^)
    mais, est-ce que la virgule ici ne jouerai pas dans la balance :

    fscanf(fichier,"%lf\n,%lf\n",&B,&A);

  8. #8
    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
    brachior a raison : si tu mets une ',' dans le format, il faut qu'il y ait une ',' dans le texte du fichier. Si les données sont séparées par des blancs (ou/et des fin de lignes), le format suivant suffira :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(fichier,"%lf%lf",&B,&A);

  9. #9
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Points : 130
    Points
    130
    Par défaut le + dans l'ouverture du fichier ?
    Bonjour,
    pourquoi mettez-vous + dans le mode à l'ouverture du fichier ?
    fopen(fileName, "rb+") ?
    De plus, ne faites pas rb+ mais r+b (voir fopen)

    r : lecture
    b : binaire
    + : pour écrire aussi

    Besoin d'écrire dedans pour plus tard ?
    Si oui, lisez tout le fichier d'un coup avec fread. Reportez-vous sur cet exemple dans ce lien : fread

    Enfin, testez si votre ouverture de fichier s'est bien passée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if (fichier) {
      /* j'ai mon fichier */
    } else {
      /* il y a eu une erreur */
    }
    Bon courage

  10. #10
    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
    @olivieram
    De plus, ne faites pas rb+ mais r+b (voir fopen)
    rb+ est acceptable :

    n1256 :
    7.19.5.3 The fopen function
    3
    ....
    r+b or rb+ open binary file for update (reading and writing)

  11. #11
    Inactif  
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    123
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2002
    Messages : 123
    Points : 130
    Points
    130
    Par défaut oui
    Citation Envoyé par diogene Voir le message
    @olivieram

    rb+ est acceptable :

    n1256 :
    Bonjour diogene,
    effectivement, cela fonctionne ça aussi comme ça.
    En revanche, je trouve le + après le r plus adéquat qu'après le b parce que le mode + s'applique au r et pas au b. Notons, qu'on voit souvent un "w+"

  12. #12
    Candidat au Club
    Femme Profil pro
    Étudiant
    Inscrit en
    Juin 2011
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Conseil

    Informations forums :
    Inscription : Juin 2011
    Messages : 4
    Points : 2
    Points
    2
    Par défaut
    Merci j'ai trouvé la méthode pour lire dans mon fichier texte grâce à vous tous...

Discussions similaires

  1. problème de lecture depuis un fichier texte
    Par [Hugo] dans le forum C++
    Réponses: 12
    Dernier message: 27/10/2006, 16h46
  2. Lecture d'un fichier texte avec ligne vide.
    Par cotcouture dans le forum Général Python
    Réponses: 2
    Dernier message: 06/10/2006, 02h54
  3. Lecture fichier texte avec un nombre de lignes à ignorer
    Par TravelMate dans le forum Langage
    Réponses: 20
    Dernier message: 02/08/2006, 11h59
  4. [VBnet] Problème de lecture d'un fichier texte.
    Par dibeloni dans le forum Windows Forms
    Réponses: 3
    Dernier message: 31/03/2006, 19h12
  5. Réponses: 2
    Dernier message: 28/12/2005, 15h00

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