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

cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention - 27 sept. 2010 à 17:24 - Dernière réponse : cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention
- 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;
}
Afficher la suite 

Votre réponse

6 réponses

Meilleure réponse
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 27 sept. 2010 à 18:26
3
Merci
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

Merci cptpingu 3

Avec quelques mots c'est encore mieux Ajouter un commentaire

Codes Sources a aidé 74 internautes ce mois-ci

Commenter la réponse de cptpingu
cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention - 27 sept. 2010 à 19:24
0
Merci
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é
Commenter la réponse de cs_mervat
cptpingu 3797 Messages postés dimanche 12 décembre 2004Date d'inscription 13 août 2018 Dernière intervention - 27 sept. 2010 à 19:48
0
Merci
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
Commenter la réponse de cptpingu
cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention - 27 sept. 2010 à 20:04
0
Merci
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
Commenter la réponse de cs_mervat
cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention - 27 sept. 2010 à 20:14
0
Merci
et j'ai d'ailleurs essayé plusieurs exemples et toujours le premier mot n'est pas supprimé
Commenter la réponse de cs_mervat
cs_mervat 90 Messages postés samedi 5 juin 2010Date d'inscription 6 mars 2015 Dernière intervention - 28 sept. 2010 à 10:13
0
Merci
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.
Commenter la réponse de cs_mervat

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.