Bonjour tous,
j'ai un texte qui ressemble à ceci :
J'aimerai lire ce texte et dès que je repère que le premier mot d'une ligne est "juju" je remplace dans les trois lignes en dessous (en fait ça serait plutôt "n" lignes) les chiffres qui se trouvent à la position numéro 5 et je les remplace par le chiffre 99999.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 dvqdfv juju rtert zfez 1 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29 dsqcdsqvsd SVDSCSV juju R 1 2 3 4 5 6 7 8 9 11 12 13 14 15 16 17 18 19 21 22 23 24 25 26 27 28 29
=> ici ça donnerait ceci :
c'est assez facile je pense à faire mais je n'y arrive pas
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 dvqdfv juju rtert zfez 1 1 2 3 4 99999 6 7 8 9 11 12 13 14 99999 16 17 18 19 21 22 23 24 99999 26 27 28 29 dsqcdsqvsd SVDSCSV juju R 1 2 3 4 99999 6 7 8 9 11 12 13 14 99999 16 17 18 19 21 22 23 24 99999 26 27 28 29
en fait mon idée est de faire :
1°) lecture ligne
2°) détecter si le premier mot de la phrase est le mot clef
3°) enregistrer l'endoit où l'on est
4°) lire la ligne à remplacer
5°) stocker tous les mots de la phrase dans un vecteur de string
6°) remplacer dans ce vecteur le mot que je veux remplacer
7°) ce repositionner à l'endroit où on veut mettre la phrase
8°) réécrire la phrase modifiée (réécrire toutes les composantes de notre vecteur)
Voici ce que j'ai fais :
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
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 #include <iostream> #include <string> //to use string #include <vector> //to use vector #include <fstream> //to use opening, writing... and more for text file or other files #include <stdlib.h> //to use atof #include <sstream> //to use the convertion from double to string and other std::ostringstream using namespace std; void parse(std::string,std::vector<std::string>&); int main () { //je déclare mon vériables nbLigne=3; string trash,command; vector <string> Arg; //fstream est mode lecture=ecriture fstream File("test.txt", ios::in | ios::out); if(File) { while (!File.eof()) { command.erase(); getline(File,command); Arg.clear(); //j'appel la fonction parse qui me découpe ma ligne en mot et stock tous les mots dans un vecteur "Arg" parse(command,Arg); if (Arg[0]=="juju") { for (unsigned int p=0;p<nbLigne;p++) { //enregistrer position où on est int pastPosition=File.tellp(); //on lit ligne qui nous intéresse command.erase(); getline(File,command); Arg.clear(); parse(command,Arg); //on revient à la position que l'on a enregistré pour mettre phrase modifiée qui ns interesse File.seekp(pastPosition,ios::beg); Arg[5]="999"; for (unsigned int i=0;i<Arg.size();i++) { File << Arg[i]; } } } } } else { cout << "impossible ouvrir fichier pour écriture résultats" << endl; } File.close(); return 0; } void parse(string _dump, vector<string>& _Arg) { size_t pos=0; _Arg.clear(); if(_dump.size()!=0) { while(1) { pos=_dump.find_first_of(" \t\n\b"); if(pos==string::npos){ _Arg.push_back(_dump); break; } else if(pos!=0) _Arg.push_back(_dump.substr(0,pos)); if(pos>=_dump.size()-1) break; _dump=_dump.substr(pos+1); } } }
ça me paraissait pas mal mais ça ne fonctionne pas (à vrai dire ça fait un peu n'importe quoi)
je ne vois pas d'où ça vient, j'espère que vous pourrez m'aider pour corriger ce bout de code...
merci d'avance
ps: gros point noir dans ce code : ce n'est pas moi qui a fait la fonction parse et du coup je ne la comprends pas
je comprends le principe mais le code ne m'est pas trop famillier... donc mon problème vient peut etre d'ici
Partager