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 des carractères dans une chaine


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut Remplacer des carractères dans une chaine
    Bonjour à toutes et à tous ,
    Je dois réaliser un logiciel en C++ avec mes quelques connaissances en C. Cela fait deux mois que je travail dessus et ça à pas mal avancé mais là je coince.
    Je voudrais lire le contenu d'un fichier entre deux balise. Puis enregistrer le tout dans un buffer de ma class et enfin, et c'est là de ça ce corse, je voudrais remplacer des Tags par des valeurs de tous types (chaine de carac, ou integer ...) . Voyez plutot :

    --==AVANT==--

    [BALISE]
    Blablablablablabla
    blablablabla
    %tag1 blablablabla %tag2 blablabla
    blablabla %tag3 blablabla
    ...
    [FIN_BALISE]

    --==APRES==--

    Blablablablablabla
    blablablabla
    coucou blablablabla 4400 blablabla
    blablabla Super si ça marche blablabla

    Et ce résultat doit ce trouver dans un second buffer pour après etre coller dans un nouveau fichier.( Mais ça je pense y arriver !! )

    Voila j'espère que je suis assez clair sinon n'hésitez pas à me le faire savoir merci d'avance !!!!

    Salut

  2. #2
    Membre éclairé
    Homme Profil pro
    Développeur Web
    Inscrit en
    Janvier 2007
    Messages
    387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Janvier 2007
    Messages : 387
    Par défaut
    Est-ce que la valeur de chaque tag est toujours identique (%TAG1 est-il toujours égal à "Coucou" ?) ?
    Si oui, je pense qu'il te suffit de faire un descripteur qui parcourt ton fichier (ou ton 1er buffer). Il met toutes les valeurs qui ne sont pas intéressantes dans le 2e buffer tel quel, mais remplace certaines valeurs (les tags) par des valeurs.

    Est-ce bien ca que tu veux faire ? Si oui, où rencontre-tu des difficultés ?

  3. #3
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut
    Oui et Non !!
    cad les valeurs devant remplacer ces Tags sont des arguments entrés au début du prog ( pour faire simple ). elle sont donc différentes à chaque fois de l'on relance l'appli....
    Donc si j'ai bien sasie ta question, oui les valeurs sont figées.
    Maitenant je vois bien le principe de ce qu'il faut faire : un décripteur qui ce promene ligne par ligne dans mon buffer mais ce que je ne vois pas bien c'est comment lui faire repérer le Tags ( sachant que les noms des Tags ne font pas tous la même taille ) et lui faire remplacer celui-ci par une valeur !!
    Le principe je l'ai j'ai même des organigrammes mon pb c'est plus au niveau prog je ne vois pas comment écrire ça ??

  4. #4
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    46
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 46
    Par défaut
    Bonjour,

    j'avais implémenté la fonciton suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    std::string Replace(const std::string str, const std::string sb, const std::string sa)
    {
    	std::string::size_type n, nb = 0;
    	std::string strRet = str;
     
    	while ((n = str.find(sb,nb)) != std::string::npos)
    	{
    		strRet.replace(n,sb.size(),sa);
    		nb = n + sa.size();
    	}
     
    	return strRet;
    }
    Qui s'utilise ainsi:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    using namespace std;
     
    int main(int argc, char **argv)
    {
    	string str1 = "Une chaine de test, c'est pour tester";
    	string str2 = Replace(str1, "test", "toto");
    	cout << str1 << endl;
    	cout << str2 << endl;
     
    	cin.get();
    	return 0;
    }
    ouput :
    Une chaine de test, c'est pour tester
    Une chaine de toto, c'est pour totoer
    Hope it helps.

  5. #5
    Membre averti
    Inscrit en
    Avril 2007
    Messages
    19
    Détails du profil
    Informations personnelles :
    Âge : 38

    Informations forums :
    Inscription : Avril 2007
    Messages : 19
    Par défaut
    Merci pyrrhon_ car je pense que ça va pas mal m'aider !!!!

    Mais une chose encore me tracasse : dans ton code les mots que tu remplacent ne sont pas effacé, les nouveaux mots sont justes collés dessus:

    Une chaine de test, c'est pour tester
    Une chaine de toto, c'est pour totoer
    Imaginons dans mon cas que le tag est %Tag1 et qu ela valeur correspondante est 12 avec cette methode j'obtient : (par exemple)

    Test du tag n°%Tag1 ?
    Test du tag n°12ag1 ?
    Et je suppose que ça doit être possible d'obtenir ceci :

    Test du tag n°%Tag1 ?
    Test du tag n°12?
    Là ce serait
    Je continu mes recherches et merci encore pyrrhon_

    PS: petite précision : je ne doit pas me servir des MFC juuste des librairies standard, cette appli est une appli Win32 !!!!

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2003
    Messages
    86
    Détails du profil
    Informations forums :
    Inscription : Mai 2003
    Messages : 86
    Par défaut
    Et avec des regexp y a pas moyen ?

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

Discussions similaires

  1. Remplacer des caractères dans une chaine et enlever certains
    Par Lucas Panny dans le forum SL & STL
    Réponses: 6
    Dernier message: 12/01/2009, 14h26
  2. Réponses: 4
    Dernier message: 14/11/2008, 21h00
  3. Remplacer des caractères dans une chaine interbase 7.5
    Par zaydoun_391 dans le forum InterBase
    Réponses: 1
    Dernier message: 15/04/2008, 16h57
  4. [Tableaux] Remplacer des variables dans une chaine
    Par Ricou13 dans le forum Langage
    Réponses: 3
    Dernier message: 28/03/2007, 21h48
  5. Réponses: 4
    Dernier message: 29/08/2006, 17h44

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