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 :

Manipulation d'un fichier de donnees


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut Manipulation d'un fichier de donnees
    Bonjour,

    je voudrais modifier l'ordre de données contenues dans fichier .ppm (fichier image contenant des pixels).

    Il faut une méthode pour que le nombre de colonnes devienne le nombre de lignes et vice-verca.

    exemple d'un fichier original:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    P3
    4 1 
    255
    10 11 12  20 21 22  30 31 32  40 41 42
    4 représente le nombre de colonnes et 1 représente le nombre de lignes
    fichier après rotation (255 le nombre de pixels maximum)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    P3
    1 4
    255
    10 11 12 
    20 21 22 
    30 31 32 
    40 41 42
    remarquez que c'est l'inverse qui devra se produire

    quelle est la procédure a suivre pour que ce changement de colonnes se fasse pour n'importe quel fichier donnée ? que faudra-t-il utiliser ?

    j'ai écris la fonction de lecture qui récupère les 3 premières valeures dans une structure, et enregistre le contenu dans un vecteur.

    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
    PPM_Primitive *read_PPM(string fn){
          PPM_Primitive p;
          vector <string> lines(0);
          ifstream infile (fn.c_str());
          string s;
          int i;
     
          if (infile.is_open()){
              infile >> p.p3 >> p.rows >> p.cols >> p.maxpixel;
                 if (p.p3=="p3" || p.p3 =="P3"){
                    while (!infile.eof()) {
                    getline(infile, s);
                    if (!infile.fail()) lines.push_back(s);
                    }
     
                 cerr << "p3: "<< p.p3<< "\nrows: " << p.rows << "\ncols: "<< p.cols << "\nmaxpixel: "<< p.maxpixel<<"\n";
     
                 for (i = 0; i <= lines.size()-1; i++) {
                     cout << lines[i] << endl;
                     }
                  } else cerr <<"Bad PPM file - first word is not P3\n";
          }
          else cerr << "Couldn't open " << fn << ".\n";
    }
    mon probleme reside dans comment je pourrais manipuler les informations dans ce vecteur.

    Merci.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Par défaut
    A priori, je dirais que tu a besoin de parser chaque ligne lue pour en extraire les différents éléments et donc obtenir un vecteur de vecteur de triplet (si j'ai bien compris).

  3. #3
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    plus d'explications ? ou d'autre réponses précises seraient les bienvenus...

  4. #4
    r0d
    r0d est déconnecté
    Membre expérimenté

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    4 290
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Août 2004
    Messages : 4 290
    Billets dans le blog
    2
    Par défaut
    Je crois que ce n'est pas très clair ta question. En tout cas, moi je ne comprend pas.

  5. #5
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Citation Envoyé par virtuadrack
    Il faut une méthode pour que le nombre de colonnes devienne le nombre de lignes et vice-verca.
    Si j'ai bien compris, ta transformation n'est pas bonne?
    Tu peux être plus clair? (ce que tu veux + ce que tu as + le problème).

  6. #6
    Membre confirmé
    Inscrit en
    Août 2004
    Messages
    201
    Détails du profil
    Informations forums :
    Inscription : Août 2004
    Messages : 201
    Par défaut
    désolé si j'ai pas été clair

    je reformule mon problème,

    je possède un fichier de données qui constitue un tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    P3 //pas important
    4 1  // 4 colonnes et 1 ligne
    255 // pas important
    /* le tableau */
    10 11 12  20 21 22  30 31 32  40 41 42
    un autre exemple:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    P3
    3 2  // 3 colonnes et 2 lignes
    255 // pas important
    /* le tableau */
    10 11 12  20 21 22  30 31 32
    40 41 42  50 53 23  12 13 14
    Je voudrais lire le fichier, enregistrer le tableau de données dans un vecteur (déjà fait dans la fonction read_PPM dans mon 1er post) puis écrire un nouveau fichier dont les données seraient organisées de tel maniere a ce que le nombre de colonnes deviennent celui des rangees et le nombre des rangees deviennent celui des colonnes. (Ce qui est une rotation en fait d'une image .ppm)

    La rotation donc du premier fichier donnée donnerait cet output:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    P3
    1 4 // 1 colonne, 4 rangées
    255 //pas important
    // tableau
    10 11 12 
    20 21 22 
    30 31 32 
    40 41 42
    Voila j'espère que j'ai bien expliquer cette fois, je suis bloquer dans le sens ou je ne trouve pas d'algorithme approprie pour ce faire, j'aimerais bien des exemples qui m'aideront fortement, des conseils seraient les bienvenus.

    Merci

  7. #7
    Membre émérite
    Avatar de Spout
    Profil pro
    Ingénieur systèmes et réseaux
    Inscrit en
    Février 2007
    Messages
    904
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Ingénieur systèmes et réseaux

    Informations forums :
    Inscription : Février 2007
    Messages : 904
    Par défaut
    Je verrais bien une map de vecteurs. Chaque entrée dans la map contiendrait en clé l'indice de la ligne et le vecteurs des colonnes en valeur.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    #include <vector>
    #include <map>
     
    stuct myStruct { 
       char val1; 
       char val2; 
       char val3 };
     
    std::map< int, std::vector<myStruct>> myMap;
    Ensuite tu construis un autre map faite à partir du parcours de la première:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    std::map<int, std::vector<myStruct>> mySecondMap;
     
    size_t nbColonnes = myMap.begin().size();
    size_t nbLignes = myMap.size();
     
    for(size_t indexLigne=0; indexLigne<nbLignes; indexLigne++)
    {
       for(size_t indexColonne=0; indexColonne<nbColonnes; indexColonne++)
          mySecondMap[indexColonne].push_back(myMap[indexLigne].at(indexColonne));
    }
    Inconvénient: parcours de toute la map + opérator = doit être défini pour la structure.

    PS: je n'ai pas testé ce code

Discussions similaires

  1. [fstream] Manipulation d'un fichier ...
    Par Zenol dans le forum SL & STL
    Réponses: 6
    Dernier message: 11/02/2006, 10h49
  2. manipulation d'un fichier indexé par un arbre b
    Par nemya_1 dans le forum Algorithmes et structures de données
    Réponses: 1
    Dernier message: 21/01/2006, 19h30
  3. lecture de mon fichier de donnees initiales
    Par salseropom dans le forum C
    Réponses: 9
    Dernier message: 13/01/2006, 14h41
  4. Réponses: 3
    Dernier message: 01/10/2005, 21h26
  5. Réponses: 4
    Dernier message: 31/07/2004, 11h14

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