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 :

Supprimer des doublons dans un fichier


Sujet :

C++

  1. #1
    Membre averti
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Par défaut Supprimer des doublons dans un fichier
    Comment fait-on pour supprimer les doublons dans un fichier ?
    je sature depuis 5 jours et je comprend rien à cela.
    exemple : contenu du fichier : bonjour je suis suis nouveau
    il faut supprimer le mot "suis".

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 146
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 146
    Billets dans le blog
    4
    Par défaut
    Bonjour,

    pourquoi vouloir le faire en C++ ?
    En script, par exemple python, c'est l'affaire de quelques minutes.

    Sinon, l'idée est assez triviale quelque soit le langage:
    - tenir une liste des mots rencontrés
    - parcourir le fichier
    - vérifier chaque mot
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  3. #3
    Membre averti
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Par défaut
    Bah c'est imposer par mon prof.
    J'ai fait ceci mais je comprends pas pourquoi j'ai ce résultat.
    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
    30
    31
    32
    33
    34
    35
    #include <iostream>
    #include <string>
    #include <vector>
    #include <sstream>
    using namespace std;
     
    int main()
    {
       string text = "je suis suis nouveau";
       vector <string> vecStr;
       istringstream ss(text);
       while(ss)
       {
            ss >> text;
            vecStr.push_back(text);
     
       }
     
      for(int unsigned i=0;i<(vecStr.size());i++){//supr des doublons
            if(vecStr[i].compare(vecStr[i+1]) == 0){
                vecStr.erase(vecStr.begin()+i);
     
            }
        }
      for(int unsigned i=0;i<(vecStr.size());i++){//reconstitution de la chaine
                text +=vecStr[i];
              if(i < (vecStr.size()-1)){
     
                cout << text <<endl;
            }
     
        }
     
     
    }
    Le résultat de ce programme :
    nouveauje
    nouveaujesuis

    alors que moi je veux : je suis nouveau.

  4. #4
    Membre Expert

    Inscrit en
    Mai 2008
    Messages
    1 014
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 1 014
    Par défaut
    Bonjour,
    Tu n'es pas très loin d'avoir une solution qui marche. Quelques corrections :

    1) Le while(ss) va faire un dernier tour de boucle une fois le dernier mot parsé et écrire en double le dernier mot dans le std::vector, il vaut mieux faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    while (ss >> text)
    {
       vecStr.push_back(text);
    }
    2) Les .compare sont difficiles à lire. Vu que les std::string savent se comparer entre elles par l'opérateur == tu peux écrire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    if (vecStr[i] == vecStr[i + 1])
    3) Pas besoin de mettre des parenthèses autour de (vecStr.size())

    4) Enfin pour le bug lui-même, La string text contient encore le dernier mot parsé "nouveau", avant que tu reconstitue le texte avec les mots sans doublon, donc il faut la vider avant:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
       text.clear();
       for (int unsigned i = 0; i < vecStr.size(); i++){//reconstitution de la chaine
          text += vecStr[i];	
       }
       cout << text << endl;

  5. #5
    Membre averti
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Par défaut
    Bonjour,
    Merci pour ton aide.
    j'ai corrigé mes erreurs mais lorsque j’exécute mon programme il m'affiche : "je suis" sans le "nouveau"

  6. #6
    Membre Expert
    Avatar de imperio
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2010
    Messages
    869
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ain (Rhône Alpes)

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

    Informations forums :
    Inscription : Mai 2010
    Messages : 869
    Par défaut
    Salut, dans les sources que j'ai poste sur developpez j'ai notamment fait un namespace avec des fonctions template comme split et join. Si ca t'interesse tu n'as qu'a y jeter un coup d'oeil.

    Normalement avec les corrections de Arzar ca devrait fonctionner. Poste ton nouveau code.

  7. #7
    Membre averti
    Développeur informatique
    Inscrit en
    Mai 2011
    Messages
    21
    Détails du profil
    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Mai 2011
    Messages : 21
    Par défaut
    Merci je vais jeter un coup d’œil.
    Euh finalement le code marche.
    Merci encore pour votre aide.
    Bonne journée.

Discussions similaires

  1. Requête pour supprimer des doublons dans une table
    Par nomade333 dans le forum Contribuez
    Réponses: 0
    Dernier message: 30/03/2008, 12h48
  2. [CSV] Ajouter et supprimer des ligne dans un fichier CSV
    Par gpsevasion dans le forum Langage
    Réponses: 3
    Dernier message: 28/02/2007, 17h00
  3. Remplacer / Supprimer des données dans un fichier txt
    Par PedroBD dans le forum Langage
    Réponses: 3
    Dernier message: 03/07/2006, 13h33
  4. [Collections]Supprimer des doublons dans une ArrayList
    Par emie31 dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 12/12/2005, 15h15
  5. Prbleme de liaison avec des doublons dans le fichier lié.
    Par krak70 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/10/2005, 11h03

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