éliminer les mots vides d'un fichier texte

Résolu
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 27 sept. 2010 à 17:24
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015 - 28 sept. 2010 à 10:13
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

cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 sept. 2010 à 18:26
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
3
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
27 sept. 2010 à 19:24
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é
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
27 sept. 2010 à 19:48
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
0
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
27 sept. 2010 à 20:04
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
27 sept. 2010 à 20:14
et j'ai d'ailleurs essayé plusieurs exemples et toujours le premier mot n'est pas supprimé
0
cs_mervat Messages postés 90 Date d'inscription samedi 5 juin 2010 Statut Membre Dernière intervention 6 mars 2015
28 sept. 2010 à 10:13
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.
0
Rejoignez-nous