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 une serie de donnees (type %f%f%f)


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 51
    Par défaut lire une serie de donnees (type %f%f%f)
    Bonjour,

    J’ai un problème lorsque je cherche à lire une série de données stockes dans un fichier .dat

    Ces donnes sont écrites de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i=0;i<n;i++) fprintf (fichier, "%f",myfloat[i]);
    donc finalement on obtient dans le fichier
    1.0000001.0000001.000000(...)1.0000000

    Et lorsque je cherche à lire le premier float,
    avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    fscanf(fichier,”%f”,myfloat[i]);
    je lis 1.0000001 (a la place de 1.000000) donc le suivant sera lu .0000001 et non 1.000000

    Je vois bien une solution pour résoudre le problème mais ca me parait bien complique

    (-convertir le premier float en string, supprimer le dernier élément de la chaine (1), convertir la chaine en float, supprimer le premier float du fichier et on recommence)

    Il doit bien y avoir un moyen bien plus simple non ?

    Sinon dans le même genre, si j’obtiens la taille de mon fichier avec la fonction stat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    tailleenoctet=(int)buf.st_size ; /* j’ai bien la taille en octet, donc logiquement si je veux le nombre de valeur je fais:*/
    nombredepoint=tailleenoctet/sizeof(float) ; /* et la le résultat est incorrect, alors qu’avec sizeof(double) le résultat est bon. Pourtant j’écris bien des float dans ce fichier ! 
    (for(i=0;i<n;i++) fprintf (fichier, " %f",myfloat[i]); ) */

  2. #2
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par nakor Voir le message
    Ces donnes sont écrites de la manière suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    for(i=0;i<n;i++) fprintf (fichier, " %f",myfloat[i]);
    donc finalement on obtient dans le fichier
    1.0000001.0000001.000000(...)1.0000000
    Logiquement non Si dans le format de ton fprintf tu mets un espace devant chaque valeur tu es censé les avoir dans ton fichier ! Au pire, tu peux toujours séparer les valeurs par un séparateur comme ';' ou encore ',' !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 51
    Par défaut
    autant pour moi c'est une faute de frappe. Il n'y a reellement aucune delimitation entre deux nombres, pas d'espaces, pas de point virgule, rien du tout.
    Il n'y a pas un moyen de s'arreter de lire apres un certain nombre de decimales et de ne pas empieter sur le nombre suivant ?

    Si je rajoutes des espaces ou points virgules je vais augmenter la taille de mon fichier et ca ne me convient pas je prefererai stockes les valeurs a la suite sans rien pour les separer

  4. #4
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par nakor Voir le message
    Il n'y a reellement aucune delimitation entre deux nombres, pas d'espaces, pas de point virgule, rien du tout.
    Il n'y a pas un moyen de s'arreter de lire apres un certain nombre de decimales et de ne pas empieter sur le nombre suivant ?
    Si, %nfn est égale au nombre de chiffre après la décimale !
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2009
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2009
    Messages : 51
    Par défaut
    J'ai pas de compilateur sous la main main il me semble que %nf ne fonctionne qu'avec printf, et pas scanf non ?

    Sinon une idee sur le fait que je ne trouve pas le bon nombre de point avec ma division tailleenoctet/sizeof (float) ?

  6. #6
    Rédacteur
    Avatar de Franck.H
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Janvier 2004
    Messages
    6 951
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Service public

    Informations forums :
    Inscription : Janvier 2004
    Messages : 6 951
    Par défaut
    Citation Envoyé par nakor Voir le message
    J'ai pas de compilateur sous la main main il me semble que %nf ne fonctionne qu'avec printf, et pas scanf non ?
    Je ne sais pas, j'ai jamais utilisé les fonctions *scanf
    Mon Site
    Ma bibliothèque de gestion des chaînes de caractères en C

    L'imagination est plus importante que le savoir. A. Einstein

    Je ne répond à aucune question technique par MP, merci d'avance !

  7. #7
    Expert confirmé
    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
    Par défaut
    Citation Envoyé par nakor Voir le message
    ....
    Sinon une idee sur le fait que je ne trouve pas le bon nombre de point avec ma division tailleenoctet/sizeof (float) ?
    Apparemment, les floats sont codés en chaine de caractères dans le fichier. Le nombre de caractères pour un float n'a alors rien à voir avec sizeof(float)

Discussions similaires

  1. PDF d'une series de donnees statistiques
    Par Trafus dans le forum MATLAB
    Réponses: 1
    Dernier message: 22/07/2011, 14h59
  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. Lire une base de donnees SQL au lieu de Access
    Par DEV-10 dans le forum VB.NET
    Réponses: 1
    Dernier message: 24/01/2008, 10h49
  4. [SQLBase Server 7.5.1]Comment lire une BDD de ce type?
    Par Niouts dans le forum Autres SGBD
    Réponses: 3
    Dernier message: 06/04/2006, 19h53
  5. Creation d'une source de données de type JDBC
    Par tiboudchou dans le forum BIRT
    Réponses: 3
    Dernier message: 04/04/2006, 12h00

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