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 fichier text et sauvegarder la résultat dans un vector


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut lire fichier text et sauvegarder la résultat dans un vector
    Bonjour,
    J'ai un fichier.txt qui contient des nombres flottante (positf,négatif) structuré de cette façon
    0.10 -12.154 +0.002
    j'ai écris ce petit code en C (j'ai pas trouvé une solution simple en c++) pour lire mon fichier
    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
    void soft_model::read_file()
    {
        char line[1000];
        float  number;
        char *p = line, *endp;
     
        if (fp != NULL)
        {
            while (fgets(line, 1000, fp))
            {
                while ( *p != '\0' ) 
                {
                    double d = strtod(p,&endp);
                    if ( p == endp ) 
                        break;
                    printf("Found value=%f\n", errno );
                    printf("Found value=%f\n", d );
                    p = endp;
                }
            }
        }
    }
    et ça marche bien
    le problème c'est que je veux maintenant sauvegarder ces informations là dans une structuré (vector) mais je n'arrive pas à faire ça
    voilà la structure proposé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    struct  joint_angle
    {
        int count;
        Ogre::Vector3 orient;
    };
     
    struct pose
    {
        float time;
        std::vector<joint_angle> angle;
    };
     
    std::vector<pose> posture;
    où chaque ligne c'est un élément (pose) dans le vecteur dynamique .

  2. #2
    Membre Expert Avatar de Ehonn
    Homme Profil pro
    Étudiant
    Inscrit en
    Février 2012
    Messages
    788
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2012
    Messages : 788

  3. #3
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    mais pour les nombres flottantes ça ne marche pas

  4. #4
    Inactif  


    Homme Profil pro
    Inscrit en
    Novembre 2008
    Messages
    5 288
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Secteur : Santé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 5 288
    Par défaut
    Salut

    j'ai pas trouvé une solution simple en c++
    Si c'est pas simple, c'est pas la bonne solution


    En lisant le lien sur ifstream, tu aurais vu qu'il y a un opérateur >> pour les float et les double. Je te conseille un peu de lecture sur les flux : la FAQ ou les cours.

    Pour faire simple, Ogre::vector3 propose un operator<< pour écrire sur un flux, mais pas l'operator>> pour lire. Il suffit donc de créer les différents opérateurs >> pour tes classes :

    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
    // opérateur pour lire un "joint_angle"
    std::istream & operator<< (std::istream & stream, joint_angle & ja) 
    {
        ja.count = 0;
        stream >> ja.orient.x >> ja.orient.y >> ja.orient.z;
        return stream;
    }
     
    // opérateur pour lire un "pose"
    std::istream & operator>> (std::istream & stream, pose & p) 
    {
        p.time = 0;
        std::copy(std::istream_iterator<joint_angle>(stream), istream_iterator<joint_angle>(), std::back_inserter(p.angle));
        return stream;
    }
     
    // pour lire un fichier
    std::ifstream stream("fichier.txt" );
    pose p;
    if (stream)
    {
        stream >> p;
    }
    Code à tester, j'ai écris à la volée.

    HS : je suppose que c'est volontaire de tout mettre en public (struct) ? Autre chose, je suis pas fan de tes noms de classes (on distingue pas ce qui correspond à un nom de classe et un nom de variable)

    Bon courage

  5. #5
    Membre éclairé
    Femme Profil pro
    Étudiant
    Inscrit en
    Septembre 2007
    Messages
    610
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2007
    Messages : 610
    Par défaut
    j'ai testé le code
    et parce que je ne suis pas familier avec les instructions de c++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    std::istream & operator<< (std::istream & stream, joint_angle & ja)
    il me fait une erreur sur "joint_angle" il m'ont dit qu'il n'est pas définit pourtant j'ai l'as utilisé ici et elle marche
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    void soft_model::read_file()
    {
        joint_angle join ;
    ............
    }

  6. #6
    Expert éminent

    Femme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    5 202
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 5 202
    Par défaut
    C'est un probleme de nommage.
    L'opérateur que tu définis est globale, joint_angle appartient à un namespace précis. Préfixe-le.

Discussions similaires

  1. Lire Fichier Texte Dans Une TextBox Par FTP
    Par pipoi26 dans le forum VB.NET
    Réponses: 5
    Dernier message: 16/02/2011, 18h21
  2. [Debutant] lire fichier text et enrgistrer dans BDD
    Par 3wicha dans le forum Windows Forms
    Réponses: 2
    Dernier message: 13/03/2008, 22h49
  3. Réponses: 10
    Dernier message: 28/12/2007, 16h58
  4. Réponses: 8
    Dernier message: 09/07/2006, 14h42
  5. Réponses: 20
    Dernier message: 23/03/2006, 16h21

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