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 :

fichiers et associations


Sujet :

C++

  1. #1
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut fichiers et associations
    bonsoir, j'ai des classes comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Ballon{ vector <Joueur*> * mesJoueurs ;
                                 But * monBut ;
    }
     
    class But { Ballon * monBallon ; Joueur * monJoueur ;}
    Comment je peux stocker les associations dans les fichiers ?
    pour l'instant j'ai créé un fichier par classe dans lequel il y a la liste des instances de la classe correspondante, comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //contenu fichier Joueur.txt, nom et age
             jean
             19
             pierre
             25
    Mais pour les associations comment je pourrais faire pour les stocker ( puis ensuite les lire ) dans des fichiers.

  2. #2
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    un pointeur de vecteur de pointeur !!!! rien que ça ?
    Je pense que tu t'y ai mal pris à la conception, et effectivement tu coinces car enregistrer un pointeur dans un fichier n'a aucun sens.

    Que veux-tu faire vraiment ? je n'ai pas compris.

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Tu n'a pas compris je n'enregistre pas le pointeur dans le fichier mais seulement la chaine de caractère ( dans ce cas le nom et age ).

    Ce que je cherche c'est comment stocker en faisant des associations, par exemple comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    le ballon rouge est associé a plusieurs joueurs

  4. #4
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    Citation Envoyé par voyageur
    Tu n'a pas compris je n'enregistre pas le pointeur dans le fichier mais seulement la chaine de caractère ( dans ce cas le nom et age ).
    Si, ça j'avais compris

    Citation Envoyé par voyageur
    Ce que je cherche c'est comment stocker en faisant des associations...
    Ben justement, c'est là que tes pointeurs posent problème, d'où ton blocage.

    Peut-être que tu pourrais utiliser des identifiants (joueur_id, ballon_id,...)
    Tu pourrais aussi utiliser une base de donnée et y accéder via SQL

  5. #5
    jmv
    jmv est déconnecté
    Membre chevronné Avatar de jmv
    Profil pro
    Enseignant
    Inscrit en
    Mai 2004
    Messages
    395
    Détails du profil
    Informations personnelles :
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Mai 2004
    Messages : 395
    Par défaut
    pour péciser un peu mon post precedent, ceci n'est qu'un exemple, je ne sais pas s'il répond à ton besoin.
    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
    class Joueur
    {
    public:
        //...
    private:
        int id;
        string nom;
        int age;
    };
     
    class Ballon
    {
    public:
        //...
    private:
        int id;
        int couleur;
        vector<Joueur*> joueurs; // les joueurs associés
    };
    et la structure de donnée dans le 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
     
    <joueurs>
        <joueur id="1">
            <nom>toto</nom>
            <age>10</age>
        </joueur>
        <joueur id="2">
            <nom>tata</nom>
            <age>23</age>
        </joueur>
    </joueurs>
     
    <ballons>
        <ballon id="1">
            <couleur>rouge</couleur>
            <joueur>1</joueur>
            <joueur>2</joueur>
        </ballon>
    </ballons>
    Pour le format XML, c'est un autre débat, à toi de voir

  6. #6
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    merci de ces precisions mais je fais uniquement par les fichiers ( pas de bd ), et xml me parait trop long et compliqué a mettre en oeuvre, il n' y a pas d'autres methodes ?

  7. #7
    Rédacteur
    Avatar de bigboomshakala
    Homme Profil pro
    Consultant Web .NET
    Inscrit en
    Avril 2004
    Messages
    2 077
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Consultant Web .NET
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2004
    Messages : 2 077
    Par défaut Re: fichiers et associations
    Citation Envoyé par voyageur
    bonsoir, j'ai des classes comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    class Ballon{ vector <Joueur*> * mesJoueurs ;
                                 But * monBut ;
    }
     
    class But { Ballon * monBallon ; Joueur * monJoueur ;}
    Comment je peux stocker les associations dans les fichiers ?
    pour l'instant j'ai créé un fichier par classe dans lequel il y a la liste des instances de la classe correspondante, comme ca :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //contenu fichier Joueur.txt, nom et age
             jean
             19
             pierre
             25
    Mais pour les associations comment je pourrais faire pour les stocker ( puis ensuite les lire ) dans des fichiers.
    tu veux pouvoir enregistrer et lire tes objets dans un fichier ?
    >> c'est ce qu'on appelle de la sérialisation

    il faut
    - soit utiliser une bibliothèque qui propose des méthodes sérialisation
    - soit surcharger les opérateurs de flux dans les classes concernées afin de pouvoir écrire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    fileOut << monObjet;
    fileIn >> mon Objet;
    sur le forum

  8. #8
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    tu veux pouvoir enregistrer et lire tes objets dans un fichier ?
    oui mais pour ca j'ai fais un truc tout bete je lis le fichier ligne par ligne et j'appelle le constructeur avec les chaines de caracteres correspondantes.

    Le vrai probleme c'est comment faire les associations entre fichiers :

  9. #9
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    T'as pas trop le choix à mon avis, il faut avoir pour chaque instance de tes classes un identifiant unique et l'inscrire dans ton fichier, pour sauvegarder les associations.

    Ou bien, autre solution, tu écris tes informations de manière hiérarchique (liste des joueurs pour chaque ballon, ou que sais-je), et si tu as des associations dans les deux sens tu peux retrouver les liens facilement avec un second parcours de tes tableaux.

  10. #10
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Ou bien, autre solution, tu écris tes informations de manière hiérarchique (liste des joueurs pour chaque ballon, ou que sais-je), et si tu as des associations dans les deux sens tu peux retrouver les liens facilement avec un second parcours de tes tableaux.
    J'ai pas bien compris , comment tu peux structurer ca dans un fichier :

    Un truc comme ca ?:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    //fichier joueur colonne 1 (nom et age) , colonne 2 (buts du joueur)
               pierre |   but1 but2 but3
               24      |
               paul    |  but7 but 9
               19      |
    Un fichier comme ca ca va etre tres chaud pour lire et ecrire dedans.

  11. #11
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Je voulais simplement dire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    but1
       ballon1
          joueur1
          joueur2
     
       ballon2
          joueur3
          joueur4
          joueur5
     
    but2
       ...
    Après tu code les buts, ballons et joueurs de la même manière qu'avant. Ca n'implique pas de changement dans la manière dont tu ecris / lis tes données, c'est simplement un réarrangement. Comme ça tu sais qui est lié à quoi. Evidemment, ça ne marchera que si tu as des liens 1 -> *.

  12. #12
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    comment t'ecris dans le fichier pour aranger comme ca , tu met des espaces ?

    et un ballon est associé a plusieurs joueurs , et un ballon est associé a un seul but.
    voila mes 2 procedure de lecture et ecriture ,
    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
     
    void Ballon::sauver_instances (ofstream * ofile){
     
    	vector<Ballon*>::iterator b=instances.begin()  ;
    	while (b!=instances.end()){
    		   *ofile << (*b)->identificateur << endl;
    		   *ofile <<  (*b)->taille << endl  ;
    		   ++b ;
    			}
     
     
     
    }
     
    void Ballon::charger_instances (ifstream * ifile){
    	 string n,a; int nombre ;
     
            // cette boucle s'arrête dès qu'une erreur de lecture survient
            while ( getline( *ifile, n ) )
            {       getline( *ifile, a ) ;
    		        // conversion string en int
    		        istringstream iss( a );
                    iss >> nombre;
                // instanciation d'un objet joueur
                    Ballon * b = new Ballon(n,nombre) ;
            }
     
     
    }

  13. #13
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    Peu importe les espaces, c'était simplement pour que ce soit plus clair pour toi... Le but est simplement d'écrire les joueurs dans l'instance de but à laquelle ils sont associés, etc...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void Ballon::sauver_instances (ofstream& ofile){
     
       for (vector<Ballon*>::iterator b = instances.begin(); b != instances.end(); ++b)
       {
           ofile << (*b)->identificateur << endl;
           ofile << (*b)->taille << endl;
           // Là tu sauves toutes les instances de Joueur associées au ballon courant
       }
    }
    Ainsi quand tu charges un ballon tu vas également charger les instances de joueur auxquelles il sera associé et le lien sera donc fait automatiquement.

  14. #14
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    D'accort ca s'eclaire pour moi
    mais si par exmeple je rajoute un joueur dans une instance de ballon il faut donc que je me positionne a la derniere ligne des joueurs et je l'insere.
    comment on fais ca ?

    et etant donné q'un ballon en plus d'etre associé a des joueuers et associé a un ballon , je met ca dans une deuxieme colonne ou comment ?

  15. #15
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Peut on se positionner a une certaine ligne d'un fichier et inserer une chaine ou supprimer cette ligne :

  16. #16
    Membre Expert
    Avatar de Ti-R
    Homme Profil pro
    Ingénieur R&D
    Inscrit en
    Avril 2003
    Messages
    1 683
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Hauts de Seine (Île de France)

    Informations professionnelles :
    Activité : Ingénieur R&D
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 683
    Par défaut
    On ne peut supprimer directement une ligne dans un fichier texte ou en insérer une...

    Le meilleur moyen est que lise tout le fichier que tu stocks le contenu en mémoire dans ton architecture, et quand tu as fini, tu sauvegardes le contenu à nouveau dans ton fichier. C'est le meilleur moyen et le plus efficace dans la majorité des cas.

  17. #17
    Membre confirmé
    Inscrit en
    Avril 2002
    Messages
    182
    Détails du profil
    Informations forums :
    Inscription : Avril 2002
    Messages : 182
    Par défaut
    Citation Envoyé par Ti-R
    On ne peut supprimer directement une ligne dans un fichier texte ou en insérer une...

    Le meilleur moyen est que lise tout le fichier que tu stocks le contenu en mémoire dans ton architecture, et quand tu as fini, tu sauvegardes le contenu à nouveau dans ton fichier. C'est le meilleur moyen et le plus efficace dans la majorité des cas.
    Oui c'est comme ca que je fais, mais je ne vois pas comment structurer mon fichier pour pouvoir ecrire ou charger les données en memoire correctement.

    Un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    // ici c'est le contenu de mon fichier ballon.txt 
              ballon1
              6 
              pierre,paul,jacques
              ballon2
              8
              jean,steeve
    si par exemple je rajoute un autre joueur pour la ballon 1 , ca va s'inserer a la fin alors que pour que ca soit bien structuré il faudrai le rajouter sur la ligne correspondante.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 18
    Dernier message: 12/03/2007, 10h57
  2. Réponses: 10
    Dernier message: 11/03/2007, 12h33
  3. [MySQL] Supprimer un enregistrement+fichier photo associé
    Par harlock59 dans le forum PHP & Base de données
    Réponses: 38
    Dernier message: 25/12/2005, 20h17
  4. [Pascal UCSD] Fichier .lib associé à une DLL
    Par nikhil dans le forum EDI
    Réponses: 3
    Dernier message: 25/07/2005, 16h02
  5. Handle -> fichier *.exe associé ?
    Par Neilos dans le forum Windows
    Réponses: 6
    Dernier message: 27/04/2004, 18h22

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