IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

remplacer une phrase d'un texte


Sujet :

C++

  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut remplacer une phrase d'un texte
    Bonjour tous,

    j'ai un texte qui ressemble à ceci :
    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
    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 : 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
    c'est assez facile je pense à faire mais je n'y arrive pas

    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

  2. #2
    Inactif  


    Homme Profil pro
    Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Inscrit en
    Décembre 2011
    Messages
    9 012
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Doctorant sécurité informatique — Diplômé master Droit/Économie/Gestion
    Secteur : Enseignement

    Informations forums :
    Inscription : Décembre 2011
    Messages : 9 012
    Points : 23 209
    Points
    23 209
    Par défaut
    Tu ne peux pas insérer ou supprimer du texte dans un fichier comme cela.

    Tu écrire par dessus (nombre de caractère inséré = nombre de caractère supprimé) et tu peux ajouter du texte à la fin (append).

    Dans ton cas, il vaudrait mieux faire un std::ofstream et insérer tout ce que tu devrais avoir dans ton fichier au fur et à mesure. Et ensuite tu réécris la totalité de ton fichier.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Février 2010
    Messages
    2 051
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 2 051
    Points : 877
    Points
    877
    Par défaut
    d'accord, merci
    je vais procéder à ceci, en effet c'est beaucoup plus facile

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 1
    Dernier message: 09/06/2009, 13h38
  2. [RegEx] Remplacer une image par un texte ou rien
    Par gtraxx dans le forum Langage
    Réponses: 4
    Dernier message: 05/12/2008, 21h57
  3. retrouver une phrase dans un texte
    Par arklane dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 22/11/2008, 20h37
  4. recherche d'une phrase dans un texte
    Par kha_yassine dans le forum Algorithmes et structures de données
    Réponses: 11
    Dernier message: 01/07/2007, 00h17
  5. algorithme pour chercher une phrase dans un texte
    Par kha_yassine dans le forum Débuter avec Java
    Réponses: 8
    Dernier message: 22/06/2007, 23h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo