[C++] Manipulation de fichiers

Résolu
cs_heyboy Messages postés 18 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 11 juillet 2005 - 20 juin 2005 à 20:01
cs_heyboy Messages postés 18 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 11 juillet 2005 - 22 juin 2005 à 16:15
Salut !

Alors, en fait, voilà mon problème, pour copier exactment un fichier, j'utilise ce code :



#include <string>

#include <fstream>

using namespace std;



int main() {

ifstream in("monfichier.txt"); // L'ouvre pour être lu

ofstream out("lememe.txt"); // L'ouvre pour écrire dedans

string s;

while(getline(in, s))

out << s << "\n";

}



En fait, ma question est :

que dois-je modifier dans ce code (ou même, si vous pouvez m'en faire
un mieux) afin que dans le nouveau fichier, certains mots soient
supprimés ?

En clair, dans le texte du départ, s'il y a par exemple le mot "lol" ou
"sms", ils ne doivent plus être présents dans le fichier d'arrivée.



Merci d'avance



ps : J'utilise dev-cpp

4 réponses

Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
21 juin 2005 à 00:03
oui c'est possible:

tu crée le fichier interdit.txt avec les noms interdit .



std::vector< std::string > bad_words;



void readBadWords(const char *filename)

{

std::ifstream in(filename);

std::string word;

while(std::getline(in,word))

{

word.replace(" ","");

word.replace("\t","");// supprime les esspace et tabulations !!

// ajoute un espace avant et après

word.insert(0," ");

word.insert(word.size()," ");

bad_words.push_back(word);

}

}



int main()

{

readBadWords("interdit.txt");

std::ifstream in("monfichier.txt");

std::ofstream out("lememe.txt");

std::string s;

while(std::getline(in,s))

{

for(int i=0;ipour chaque mot interdit

->créer le mot " "+mot+" "

->créer le mot "\t"+mot+"\t";

->créer le mot "\t"+mot+" ";

->créer le mot ""+mot+"\t";



bien sûr ceci fais 4x plus de comparaison .

Sinon tu peux remplacer les tabulation par n espaces dans le fichier original:

s.replace("\t"," ");


A m a u r y
3
Pamaury Messages postés 341 Date d'inscription jeudi 3 avril 2003 Statut Membre Dernière intervention 17 juin 2008 3
20 juin 2005 à 22:38
là çà va être plus compliqué !

Il faut récupérer chaque ligne(comme tu le fais)et

->soit tu fais une recherche des mots que tu veux dedans et un remplacement: s.replace(" lol "," ");

(note l'espace avant et après le lol !!!)

->soit tu découpe le la ligne en token séparé par des espace et tu compare chzque token aux mots à supprimer.

(plus long je pense(même presque sûr) .

A m a u r y
0
cs_heyboy Messages postés 18 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 11 juillet 2005
20 juin 2005 à 22:57
Ah ok, et je dois faire ça pour chaque mot ?

N'y aurait-il pas un moyen, si par exemple je met tous les mots "indésirables" dans un fichier texte, qu'il les ignore tous ?



(Merci pour ça déjà ;))
0
cs_heyboy Messages postés 18 Date d'inscription dimanche 20 février 2005 Statut Membre Dernière intervention 11 juillet 2005
22 juin 2005 à 16:15
OK, c'est super cool, merci ! :)
0
Rejoignez-nous