remplacer une phrase d'un texte
Bonjour tous, :D
j'ai un texte qui ressemble à ceci :
Code:
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 |
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.
=> ici ça donnerait ceci :
Code:
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 |
c'est assez facile je pense à faire mais je n'y arrive pas :oops:
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:
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 :oops:
je comprends le principe mais le code ne m'est pas trop famillier... donc mon problème vient peut etre d'ici :roll: