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 :

Lire des nombres dans un txt [Non suivi]


Sujet :

C

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut Lire des nombres dans un txt
    Bonjour j'ai un petit problème pour lire des nombres dans un fichier texte qui se présente sous cette forme :

    1.200000e1 2.500000e2 1.600000e2 .... (c'est bien un représentation de double, non?)

    Je pensais utiliser fscanf mais je ne connais pas bien cette fonction
    et en faisant un fscanf(fid, "%le") il va lire toute la premiere ligne et pas le premier.. je ne sais pas comment faire, si vous pouviez m'aider, je vous en serais très reconnaissant. Merci

  2. #2
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Salut,

    Le problème avec fscanf, c'est que ça n'est pas une fonction sûre.
    Ca peut occasionner de gros problèmes si le format n'est pas le bon à un moment.
    Le mieux serait de passer par fgets() et strtod().

    Es-tu obligé d'organiser ton fichier en une seule ligne ?
    La lecture serait beaucoup plus facile si il n'y avait qu'un seul nombre par ligne.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    62
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 62
    Par défaut
    Malheureusement le fichier texte que je dois lire est produit par Matlab .. et donc je ne peux modifier son agencement ...

    Que fait la fonctions strtod .. une convertion de caractères en nombres de formats que l'on souhaite ?

  4. #4
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Malheureusement le fichier texte que je dois lire est produit par Matlab .. et donc je ne peux modifier son agencement ...
    Tant pis, on fera sans.

    Que fait la fonctions strtod .. une convertion de caractères en nombres de formats que l'on souhaite ?
    strtod signifie string to double, elle convertit une chaîne de caractère en double. Consulte la doc.

    Que veux-tu faire, maintenant ?
    Lire uniquement le premier nombre ?
    Tous les lire ?
    Les stocker ?
    Donne des détails.

  5. #5
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    fgets + sscanf ( "%g %g %g ...", &nb1, &nb2, &nb3, ...)

    où nb1, nb2, nb3 sont des floats...

  6. #6
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    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
    #include <stdio.h>
     
     
    int main(void)
     {
     FILE *f;
     double d;
     
     if ((f=fopen("Input.txt","r"))==NULL)
      {
      printf("Erreur d'ouverture du fichier\n");
      return -1;
      }
     while (fscanf(f,"%lg",&d)!=EOF) printf("%g\n",d);
     fclose(f);
     return 0;
     }

  7. #7
    Membre éclairé
    Avatar de odsen.s
    Profil pro
    Étudiant
    Inscrit en
    Octobre 2006
    Messages
    269
    Détails du profil
    Informations personnelles :
    Âge : 35
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2006
    Messages : 269
    Par défaut
    Citation Envoyé par souviron34
    fgets + sscanf ( "%g %g %g ...", &nb1, &nb2, &nb3, ...)

    où nb1, nb2, nb3 sont des floats...
    N'y a t-il pas le même problème avec sscanf qu'avec fscanf (problème en cas de format incorrect dans le fichier) ?

  8. #8
    Expert confirmé

    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    10 610
    Détails du profil
    Informations personnelles :
    Âge : 67
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 10 610
    Billets dans le blog
    2
    Par défaut
    certainement, mais si le fichier est d'un certain type donné, bah....

    Mais bien sûr on peut vérifier champ par champ et avertir si mauvais champ...



  9. #9
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    fscanf() et sscanf() ne posent pas de problème pourvu que l'on sache les utiliser.

  10. #10
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par stephl
    fscanf() et sscanf() ne posent pas de problème pourvu que l'on sache les utiliser.
    Il faut par exemple tester la valeur retournée...

  11. #11
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par Emmanuel Delahaye
    Il faut par exemple tester la valeur retournée...
    Et alors? Ce n'est pas un problème...

  12. #12
    Membre Expert
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Par défaut
    Citation Envoyé par stephl
    Et alors? Ce n'est pas un problème...
    Ben, tu defends une bonne utilisation de *scanf(), mais dans l'exemple que tu donnes tu ne testes que la fin de lecture, pas le nombre de conversions reussies (dans ton exemple, il faut que ce soit 1). Ce n'est pas une bonne utilisation de *scanf().

  13. #13
    Membre émérite Avatar de stephl
    Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    643
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Février 2007
    Messages : 643
    Par défaut
    Citation Envoyé par DaZumba
    Ben, tu defends une bonne utilisation de *scanf(), mais dans l'exemple que tu donnes tu ne testes que la fin de lecture, pas le nombre de conversions reussies (dans ton exemple, il faut que ce soit 1). Ce n'est pas une bonne utilisation de *scanf().
    Ici, si j'ai bien compris, le fichier est généré automatiquement par Matlab et ne contiendra que des réels, donc pas de risque que *scanf() échoue.

  14. #14
    Expert éminent
    Avatar de Emmanuel Delahaye
    Profil pro
    Retraité
    Inscrit en
    Décembre 2003
    Messages
    14 512
    Détails du profil
    Informations personnelles :
    Âge : 68
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Retraité

    Informations forums :
    Inscription : Décembre 2003
    Messages : 14 512
    Par défaut
    Citation Envoyé par stephl
    Ici, si j'ai bien compris, le fichier est généré automatiquement par Matlab et ne contiendra que des réels, donc pas de risque que *scanf() échoue.
    Bah, il y a toujours un risque qu'une lecture échoue. Tu fais ce que tu veux. Nous on se contente de rappeler les règles de bon usage, c'est tout.

  15. #15
    Rédacteur/Modérateur

    Avatar de Jerome Briot
    Homme Profil pro
    Freelance mécatronique - Conseil, conception et formation
    Inscrit en
    Novembre 2006
    Messages
    20 317
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance mécatronique - Conseil, conception et formation

    Informations forums :
    Inscription : Novembre 2006
    Messages : 20 317
    Par défaut
    Citation Envoyé par Far_Away
    Malheureusement le fichier texte que je dois lire est produit par Matlab .. et donc je ne peux modifier son agencement ...
    Vient faire un tour sur le forum Matlab et on te montrera comment modifier la "génération automatique" de ton fichier texte (ce qui devrait simplifier la suite de ton travail )

Discussions similaires

  1. Fonction pour lire des nombres dans un fichier
    Par passant_ dans le forum Débuter
    Réponses: 11
    Dernier message: 28/10/2008, 18h47
  2. Ecrire & Lire des énumérés dans un fichier Texte
    Par WebPac dans le forum Langage
    Réponses: 8
    Dernier message: 18/06/2008, 10h04
  3. Réponses: 6
    Dernier message: 26/05/2008, 20h08
  4. [VBS]Lire des données dans un fichier .txt
    Par kacxial dans le forum VBScript
    Réponses: 4
    Dernier message: 28/02/2007, 13h44
  5. Utilisation des nombres dans Winsock2
    Par DeusXL dans le forum MFC
    Réponses: 14
    Dernier message: 01/12/2004, 17h36

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