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 :

Rechercher Remplacer Avancé avec Regex


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut Rechercher Remplacer Avancé avec Regex
    Salut amis developpeurs(euses)

    Tout d'abord je tiens à m'excuser si je suis pas dans la bonne catégorie.
    je développe en c++ mais le fonctionnement du regex est indépendant de tout langage de programmation
    Je voudrais remplacer toutes les occurences de "float mon_tableau[]" par
    "float *mon_tableau".
    Le problème est : Il faut le faire sur des centaines de fichiers.
    Je suis novice en regex et tout ce que j'ai trouvé jusque là ne marche pas.
    Je me remet donc aux connaisseurs dans le domaine.

  2. #2
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Dans UltraEdit, ça se fait assez facilement.
    Sans utiliser d'expressions régulières.

  3. #3
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Ah, les joies de l'encapsulation...

    Sinon, je ne vois effectivement pas le besoin d'une expression rationnelle pour faire ça. A moins que mon_tableau soit un nom placeholder. Auquel cas, effectivement, une regex de remplacement pourra être nécessaire.

    Sous sed, elle devrait ressembler à : sed 's:float \(.*\)[.*]:float *\1:' à peu de choses près.
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  4. #4
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Merci à tous pour vos réponses.

    Dans UltraEdit, ça se fait assez facilement.
    Sans utiliser d'expressions régulières.
    Pourrais-tu développer stp ?
    ultaredit est plutôt payant non?

    A moins que mon_tableau soit un nom placeholder
    je ne sais pas ce que tu mets dans placeholder mais le nom mon_tableau n'est pas connu d'avance.

    Merci d'avance

  5. #5
    Membre émérite
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    2 764
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 2 764
    Points : 2 704
    Points
    2 704
    Par défaut
    Citation Envoyé par nasboy3d Voir le message
    Pourrais-tu développer stp ?
    ultaredit est plutôt payant non?
    Pas grand chose à expliquer : Edition/Remplacer sur un dossier, et voilà.
    Et effectivement, UltraEdit est payant. Mais tellement puissant...

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Notepad++ est gratuit et le permet tout autant
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Merci à tous pour vos réponses
    Mais je pense que le problème n'est pas aussi simple que vous le pensez.
    Comme énoncé dans un de mes messages le mon_tableau n'est pas connu d'avance ça peut-être n'importe quel nom : Cela veut dire tout simplement que dans notepad++ par exemple tu ne peut pas mettre en dur la chaîne à rechercher.
    Ce dont j'ai besoin c'est rechercher toute sous-chaîne commençant par float suivi d'un blanc et d'un string et finissant par [] (ex: float tab[]).
    Et ainsi remplacer le float par float * puis le [] par un blanc.

    Je pense que c'est plus clair maintenant.

    Merci

  8. #8
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Bonsoir.

    Bousk ne l'a pas dit explicitement, mais la fonction « Rechercher-Remplacer » de Notepad++ supporte les expressions rationnelles.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Merci Steph_ng8 pour ta réponse
    Dans Notepad++, j'ai 3 modes de recherche :
    - Mode normal
    - Mode étendu --> es-ce ce que t'appelle expression rationnelle ?
    - Expression régulière

  10. #10
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Dans le mode « normal », aucun caractère n'a de signification particulière.
    C'est le mode « plain text » si l'on veut.

    Pour le mode « étendu », de mémoire il y a une parenthèse explicative :
    (ex. \n, \t...)
    Autrement dit, le caractère backslash (\) permet de donner une signification particulière à celui qui suit directement.
    C'est un mode qui permet de capturer facilement les retours à la ligne ou les tabulations, par exemple.
    On peut peut-être même capturer des caractères grâce à leur code ASCII en hexadécimal ou leur code UNICODE.
    Je n'ai jamais essayé, donc à vérifier...

    Reste le mode « expression régulière », qui est en fait celui que tu cherches.

    Mais tout cela devrait être expliqué dans l'aide, non ?

    Il faut savoir que l'expression anglaise « regular expression » est traduite en français soit par « expression rationnelle », soit par « expression régulière ».
    Si la seconde semble être une traduction littérale et plus fidèle, c'est en réalité la première qui est officielle.
    http://fr.wikipedia.org/wiki/Express...A9guli%C3%A8re

    Mais bon, par « facilité » peut-être, la plupart du temps on entend « expression régulière ».

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Reste le mode « expression régulière », qui est en fait celui que tu cherches.

    Mais tout cela devrait être expliqué dans l'aide, non ?
    Justement c'est ça mon souci.
    Je n'arrive pas à trouver le bon motif à rechercher avec l'option expression régulière. La doc de notepad++ est très limitée sur le sujet.
    En même j'ai pas trop le temps d'avoir des connaissances solides sur les regex.(je suis en plein projet )
    Donc s'il y en a qui peuvent m'aider là-dessus ça sera cool !!

    Merci

  12. #12
    Expert confirmé

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2007
    Messages
    1 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Septembre 2007
    Messages : 1 895
    Points : 4 551
    Points
    4 551
    Par défaut
    Citation Envoyé par nasboy3d Voir le message
    Justement c'est ça mon souci.
    Je n'arrive pas à trouver le bon motif à rechercher avec l'option expression régulière. La doc de notepad++ est très limitée sur le sujet.
    En même j'ai pas trop le temps d'avoir des connaissances solides sur les regex.(je suis en plein projet )
    Donc s'il y en a qui peuvent m'aider là-dessus ça sera cool !!

    Merci
    http://sourceforge.net/apps/mediawik...ar_Expressions
    [FAQ des forums][FAQ Développement 2D, 3D et Jeux][Si vous ne savez pas ou vous en êtes...]
    Essayez d'écrire clairement (c'est à dire avec des mots français complets). SMS est votre ennemi.
    Evitez les arguments inutiles - DirectMachin vs. OpenTruc ou G++ vs. Café. C'est dépassé tout ça.
    Et si vous êtes sages, vous aurez peut être vous aussi la chance de passer à la télé. Ou pas.

    Ce site contient un forum d'entraide gratuit. Il ne s'use que si l'on ne s'en sert pas.

  13. #13
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Oui il s'agit maintenant de trouver la bonne expression

    Je n'en ai pas fait depuis très longtemps, mais on peut tenter et tatônner
    Je me lance !
    rechercher "float ([_a-zA-Z0-9])+\[\]" (ou bien le + dans la parenthèse ?)
    et remplacer par "float* \1"
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  14. #14
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Merci Bousk
    T'y est presque, le rechercher marche nikel mais le remplacer ne marche pas
    Au lieu de le remplacer par float *mon_tableau il le remplace par float *

  15. #15
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    C'est étrange, ça devrait marcher, faut mieux placer les () alors je pense, essaye d'y inclure le +
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  16. #16
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    c'est pareil avec le + à l'intérieur des () ...

  17. #17
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    Trouvé !!
    En fait il faut juste rajouter {} à l'dentificateur C++ comme ceci :
    float {([_a-zA-Z0-9]+)}\[\].
    Merci à tous et plus particulièrement à Bousk qui m'a plus que mis sur la bonne voie

  18. #18
    Membre éprouvé Avatar de Steph_ng8
    Homme Profil pro
    Doctorant en Informatique
    Inscrit en
    Septembre 2010
    Messages
    677
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Doctorant en Informatique

    Informations forums :
    Inscription : Septembre 2010
    Messages : 677
    Points : 997
    Points
    997
    Par défaut
    Hum... c'est suspect ces accolades...
    En même temps ça fait longtemps que je n'ai pas utilisé Notepad++ (ne vais plus sous Windows, alors forcément... )

    Sinon, pour ceux que ça intéresse, c'est possible de le faire en lignes de commandes, grâce à egrep et sed (en tout cas sous UNIX).
    Je suppose que tous les fichiers sont dans le répertoire courant, mais si ce n'est pas le cas ce n'est pas compliqué de modifier.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    for f in `egrep -l 'float [_a-zA-Z0-9]+\[\]' *`
    do
        sed -e 's/\(float\) \([_a-zA-Z0-9]+\)\[\]/\1* \2/g' $f > tmp
        mv -f tmp $f
    done
    rm -f tmp
    J'utilise egrep uniquement pour éviter de « modifier » les fichiers qui ne contiennent pas l'expression à changer.
    Selon l'importance que ça a, on peut retirer cette instruction et la remplacer par un simple ls (voire find).

    J'utilise un fichier auxiliaire parce qu'on ne peut pas utiliser le même buffer pour l'entrée et la sortie.
    Ou s'il y a un moyen de le faire, je ne le connais pas.

    Ne connaissant pas bien MAC, je ne sais pas s'il y a un équivalent
    Pour Windows, la commande findstr devrait faire la même chose que egrep.
    Mais pour sed, je ne sais pas.

  19. #19
    Rédacteur/Modérateur


    Homme Profil pro
    Network game programmer
    Inscrit en
    Juin 2010
    Messages
    7 113
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 36
    Localisation : Canada

    Informations professionnelles :
    Activité : Network game programmer

    Informations forums :
    Inscription : Juin 2010
    Messages : 7 113
    Points : 32 958
    Points
    32 958
    Billets dans le blog
    4
    Par défaut
    Effectivement je ne comprends pas ce que viennent faire des accolades ici
    Pensez à consulter la FAQ ou les cours et tutoriels de la section C++.
    Un peu de programmation réseau ?
    Aucune aide via MP ne sera dispensée. Merci d'utiliser les forums prévus à cet effet.

  20. #20
    Membre à l'essai
    Profil pro
    Inscrit en
    Février 2010
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2010
    Messages : 60
    Points : 23
    Points
    23
    Par défaut
    petite précision !!
    j'ai finalement utilisé la fonction Rechercher/Remplacer de Visual Studio et c'est quand je rajoute les accolades que ça marche.

Discussions similaires

  1. Recherche Avancé avec un AND
    Par mactwist69 dans le forum Mode d'emploi & aide aux nouveaux
    Réponses: 4
    Dernier message: 29/03/2009, 20h40
  2. [RegEx] Rechercher/remplacer avec preg_replace
    Par olbouss dans le forum Langage
    Réponses: 5
    Dernier message: 13/01/2009, 13h00
  3. Recherche avancée avec checkbox
    Par Marcus15 dans le forum Langage
    Réponses: 6
    Dernier message: 05/07/2007, 18h15
  4. [VS] rechercher/remplacer avec des regexp
    Par v1nce dans le forum Visual Studio
    Réponses: 4
    Dernier message: 03/07/2007, 15h58
  5. Rechercher, remplacer, Regex
    Par Rewind dans le forum Langage
    Réponses: 2
    Dernier message: 07/02/2007, 10h50

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