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

Langage C++ Discussion :

Problème de réorganisation de données


Sujet :

Langage C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut Problème de réorganisation de données
    Bonjour,

    J'ai un programme dans lequel je dois présenter des données d'une autre façon et je galère un peu! Voici mon problème:

    - Les données de base "donneesEntree" ont été enregistrées dans un tableau de structures:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    struct base {
        int idTrack;
        int numsPhases[4];
        [... autres parametres qui ne concernent pas le probleme]
    };
    vector<struct base> donneesEntree;
    Il s'agit de données récupérées dans un fichier, chaque élément de mon vector correspondant à une ligne du fichier.
    Dans une ligne de fichier, je récupère donc le idTrack (qui peut valoir entre 1 et 4) ainsi que 4 numéros de phases. Les numéros de phase ont un rang et sont enregistrés par ordre de rang dans le tableau numsPhases. Il n'y a pas forcément 4 numéros de phases "utiles" (entier >0), il peut y en avoir moins (mais au moins 1); dans ce cas les autres cases du tableau valent 0. Exemple de ce à quoi ressemble le fichier:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    NumTrack PhaseRang1 PhaseRang2 PhaseRang3 PhaseRang4
    1          12345       65278     0        0
    2          54698       0         0         0
    1          54861       65278     6983     0
    1          54861       0         6983     0
    [...]
    - Je veux rassembler ces données dans "tracks" de la manière suivante pour pouvoir effectuer des traitement ensuite:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    struct reorg {
        int idTrack;
        [... autres parametres qui ne concernent pas le probleme]
        vector<struct phaseReorg> phases;
    };
    struct phaseReorg{
        int rang;
        int numPhase;
        [... autres parametres qui ne concernent pas le probleme]
    };
    struct reorg tracks[4];
    Je veux donc, pour chaque "Track", obtenir une liste de structures "phasesReorg", une pour chaque couple [rang, numPhase]. Par exemple:
    Track1:
    Rang 1 Phase 123456
    Rang 1 Phase 54861
    Rang 2 Phase 65278
    Rang 3 Phase 6983
    [Pas de rang 4 car tous les numeros de phase de rang 4 pour ce Track valent 0 dans le fichier]
    [Même principe pour Track 2, 3 et 4]

    Voilà pour le problème j'espère l'avoir expliqué clairement!
    Voici un début de solution que j'ai codé:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    vector <vector <vector <int> > > phases;
    for (int iTrack=0; iTrack < 4; iTrack++)
    {
        vector<vector <int> > phasesTrack;
        vector<int> phasesRang;
        for(int rang=0; rang<4; rang++)
            phasesTrack.push_back(phasesRang);
        for(unsigned ligneFic = 0; ligneFic < donneesEntree.size(); ligneFic++)
            if(donneesEntree[ligneFic].idTrack == iTrack+1)
                for(int rang=0; rang <4; rang++)
                    phasesTrack[rang].push_back(donneesEntree[i].phase[rang]);
        phases.push_back(phasesTrack);
    }
    J'ai créé un vecteur à 3 dimensions intermédiaire car je ne vois pas comment passer directement d'une structure "vector<donneesEntrees>" à une structure "struct reorg tracks[4]". Avec ce vecteur j'ai donc, pour chaque Track, puis pour chaque Rang, la liste des numéros de phase correspondant.
    A priori à partir de ce vecteur je vais pouvoir remplir ma structure tracks (sachant qu'il faudra que je supprime les doublons car il peut y avoir plusieurs fois le même couple [rang, phase] pour piste donnée tel que j'ai codé cela).

    Cependant je pense que cette solution est très moche je n'aime pas le vecteur à 3 dimensions, mais je ne vois pas trop comment faire autrement! En plus je pense que je m'y prends mal pour initialiser mes vecteurs. Je pense qu'il existe des solutions plus élégantes, j'ai vu des exemples utilisant une classe template notamment mais je n'ai pas trop compris comment ça fonctionne...
    Pouvez-vous me donner des pistes?

    Merci d'avance

  2. #2
    Expert confirmé
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2005
    Messages
    5 449
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Conseil

    Informations forums :
    Inscription : Février 2005
    Messages : 5 449
    Par défaut
    Pourquoi ne pas utiliser des conteneurs de la STL plus adaptés comme des maps ?

  3. #3
    Membre éclairé
    Femme Profil pro
    Ingénieur informatique scientifique
    Inscrit en
    Mai 2010
    Messages
    313
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 35
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur informatique scientifique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Mai 2010
    Messages : 313
    Par défaut
    Pourquoi ne pas utiliser des conteneurs de la STL plus adaptés comme des maps ?
    En effet... ^^'
    Je ne connaissait pas trop les map (jamais utilisé, j'aurais peut-être du poster dans débutant ), mais effectivement ça correspond bien à mon problème!

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    map<pair<int, int>, vector<int> > phases;   // Un vector<int> avec les phases pour chaque couple [numTrack, rang]
    for(unsigned i=0; i<donneesEntree.size(); i++)
    {
        for(int rang=0; rang < 4; rang++)
        {
             pair<int, int> couple = make_pair(donneesEntree[i].numTrack, rang+1);
             int newPhase = donneesEntree[i].phase[rang];
             if(newPhase>0 && find(phases[couple].begin(), phases[couple].end(), newPhase) == phases[couple].end())
                 phases[couple].push_back(newPhase);
        }
    }
    Comme ça je peux accéder comme il faut aux éléments :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    for(map<pair<int, int>, vector<int> >::iterator it = phases.begin(); it != phases.end(); it++)
    {
        cout <<  "Numero Track: " << it->first.first << endl;
        cout <<  "Rang: " << it->first.second << endl;
        cout <<  "Phases: " << endl;
        for(unsigned i=0; i<it->second.size(); i++)
            cout << it->second[i] << endl;
     
    }
    Pas de doublon, seules les infos utiles sont gardées! Je vais pouvoir remplir mes structures avec ça.
    Merci!

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

Discussions similaires

  1. Réponses: 5
    Dernier message: 11/03/2004, 15h34
  2. [Designer] Problème de transfert de données entre modul
    Par BILLYPATOU dans le forum Designer
    Réponses: 11
    Dernier message: 09/03/2004, 18h15
  3. Problème de rafraîchissement de données...
    Par Alain Dionne dans le forum Bases de données
    Réponses: 3
    Dernier message: 06/03/2004, 21h07
  4. [Interbase 7] Problème d'insertion de données
    Par Tuscelan dans le forum InterBase
    Réponses: 12
    Dernier message: 19/11/2003, 22h58
  5. problème xsl : inclure une donnée xml dans une balise html
    Par djodjo dans le forum XSL/XSLT/XPATH
    Réponses: 3
    Dernier message: 03/01/2003, 09h24

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