éliminer les mots vides d'un fichier texte [Résolu]

Signaler
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
cs_mervat
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015
-
bonjour,
j'ai un petit truc qui me bloque,
je veux éliminer du fichier texte in les mots qui existent dans le fichier texte motvide et mettre le résultat dans le fichier texte out.
ce code me permet de le faire sauf pour le premier mot du texte in qui n'ai pas traité (c'est à dire si c'est un mot vide il n'est pas supprimé)
j'espère que quelqu'un peut m'aider à trouver la cause.

#include 
#include <fstream>
#include <string>
#include <list>
#include 


void compare()
{
  int i 0, num_ligne 0;
  ifstream ifs("in.txt") ;
  ofstream ofs("out.txt");
  std::string s;
  std::list<std::string> ma_liste;

  ifstream entree ("motvide.txt");
  std::string mot;
  while (entree >> mot)
ma_liste.push_back(mot);


  while (ifs >> s)
  {std::list<std::string>::const_iterator
lit (ma_liste.begin()),
lend(ma_liste.end());
  for(;lit!=lend;++lit)
 {
   if ( s == *lit)
 {
   i = 1;
   break;
 }
 }
if (i!=1)

   ofs << s << " ";
i=0;

  }

}


int main()
{
  compare();
  return 0;
}

6 réponses

Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Tu as du te mélanger les pinceaux avec la gestion du "i". J'ai pas vraiment regardé.
J'ai juste découpé ton code en petite fonction, et l'erreur c'est corrigé d'elle même, c'est magique :)

#include 
#include <fstream>
#include <list>

bool isInList(const std::string& word, const std::list<std::string>& list)
{
  typedef std::list<std::string>::const_iterator iter;
  for (iter it = list.begin(); it != list.end(); ++it)
    if (word == *it)
      return true;

  return false;
}

void loadEpmptyWordList(const std::string& filename, std::list<std::string>& list)
{
  std::ifstream file(filename.c_str());
  if (!file)
  {
    std::cerr << "Unable to open the file: " << filename << std::endl;
    return;
  }
  std::string word;
  while (file >> word)
    list.push_back(word);
}

void compare()
{
  std::list<std::string> ma_liste;
  loadEpmptyWordList("motvide.txt", ma_liste);

  // TODO: Tester la réussite de l'ouverture de fichier pour in.txt !
  std::ifstream ifs("in.txt");
  std::ofstream ofs("out.txt");
  std::string s;
  while (ifs >> s)
    if (!isInList(s, ma_liste))
ofs << s << " ";
}

int main()
{
  compare();
  return 0;
}


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

merci pour l'aide, mais l'erreur existe encore pour le premier mot, c'est à dire si le premier mot de in est un mot vide il n'est pas supprimé alors qu'il doit être supprimé
Messages postés
3802
Date d'inscription
dimanche 12 décembre 2004
Statut
Modérateur
Dernière intervention
9 janvier 2020
93
Tu es sur ? As-tu un exemple ?

J'ai lancé mon programme comme suit:
motsvides.txt
toto titi tutu tata

in.txt
toto hey titi ca va tutu ?

et j'obtiens
out.txt
hey ca va ?


________________________________________________________________________
Historique de mes créations, et quelques articles:
[ http://0217021.free.fr/portfolio http://0217021.free.fr/portfolio]
Merci d'utiliser Réponse acceptée si un post répond à votre question
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

c'est vraiment bizarre

voila mon exemple:

motsvides.txt
c'est a le



in.txt
a vendredi le 2 a juillet



et j'obtiens
out.txt
a vendredi 2 juillet
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

et j'ai d'ailleurs essayé plusieurs exemples et toujours le premier mot n'est pas supprimé
Messages postés
90
Date d'inscription
samedi 5 juin 2010
Statut
Membre
Dernière intervention
6 mars 2015

bonjour, enfin j'ai trouvé la faute,
le code est tout a fait juste, le problème était dans mes fichiers d'entrée,
lorsque j'ai changé le nom de ces fichiers j'ai obtenu de bons résultats.
merci encore Mr cptPingu car c'est grâce à vous que j'ai connu l'origine de ma faute.