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 :

Expression régulière pour code moche


Sujet :

C#

  1. #1
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut Expression régulière pour code moche
    Bonjour,

    Je récupère un code avec des espaces de partout, des indentations pourries, ...
    D'autre part, je dois modifier le nom de certaines fonctions, car les fonctions appelées doivent changer (modification de la bibliothèque utilisée).
    J'ai donc fait une "jolie" expression régulière, qui supprime les espaces en trop pour une fonction particulière ayant 3 arguments.
    Malheureusement, cela ne va pas aussi loin que je le voudrais.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Regex MyRegex = new Regex(@"\s*([/]*)\s*FonctionAvant\s*\(\s*(.*)\s*,\s*(.*)\s*,\s*(.*)\s*\)\s*;\s*");
    NewLine = MyRegex.Replace(Line,"$1FonctionApres($2, $3, $4);");
    Cela marche bien lorsque le code est, par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    // Avant
    FonctionAvant  (PARA1       , PARA2        , PARA3     )   ;
    // Après
    FonctionApres(PARA1, PARA2, PARA3);
    Mais si le code est
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    // Avant
    FonctionAvant  (PARA1       , PARA2 | Truc        , PARA3     )  ;
    Cela ne fonctionne pas, car il y a des espaces qui existent autrement qu'après / avant les virgules.

    J'utilise vi, et remplacer le \s*(\S*)\s* par \s*(.*)\s* fonctionne très bien, pour résoudre le problème.
    C#, pour le moment, considère le .* comme prioritaire sur \s, et ne supprime donc pas les espaces.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Regex MyRegex = new Regex(@"\s*([/]*)\s*FonctionAvant\s*\(\s*(\S*)\s*,\s*(\S*)\s*,\s*(\S*)\s*\)\s*;\s*");
    NewLine = MyRegex.Replace(Line,"$1FonctionApres($2, $3, $4);");
     
    // Avant
    FonctionAvant  (PARA1       , PARA2 | Truc        , PARA3     )   ;
    // Après
    FonctionApres  (PARA1       , PARA2 | Truc        , PARA3     );
    Avez-vous une idée ?

    Merci

  2. #2
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Il serait peut être opportun de prendre un plugin du genre Resharper qui permet de nettoyer et formater le code correctement

  3. #3
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    En fait, je fais ce petit logiciel car cet outil devra être utilisé pour migrer du code C sur micro-contrôleur avec différents IDE (notamment Keil et Eclipse).
    Donc pas de plugin envisageable...

  4. #4
    Membre Expert
    Avatar de GuruuMeditation
    Homme Profil pro
    .Net Architect
    Inscrit en
    Octobre 2010
    Messages
    1 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : Belgique

    Informations professionnelles :
    Activité : .Net Architect
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2010
    Messages : 1 705
    Par défaut
    Resharper est un plugin (indispensable a mon sens) de l'editeur de visual studio. Ca t'aide à formatter ton code (entre autres). Mais ce n'est pas un plugin qui va être utilisé par ton appli lors de son exécution.

    Ca va t'aider très fort pour la partie "Je récupère un code avec des espaces de partout, des indentations pourries"

  5. #5
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Je suis le seul à utiliser Visual Studio, puisque tous mes collègues utilisent Keil, Eclipse ou autres IDE.
    J'utilise Visual Studio en C# pour écrire des utilitaires.
    Je souhaite donc écrire un programme qui rend propre un code écrit en C, de façon à ce que les autres puissent aussi profiter de la migration pour récupérer du code propre, et ceci sans utiliser Visual Studio.

  6. #6
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Je ne comprends toujours pas...

    Pourquoi ne pas simplement formater le code avec Visual Studio + ReSharper puis fournir les sources aux personnes utilisant les autres IDE pour qu'elles reparte de cette base "propre" ?

    Ou alors tu suggères qu'elles ne travaillent pas sur les mêmes sources ? (versioning?)
    Au pire, ça prendra sans doute moins de temps de formater une à une les différentes versions que de développer l'utilitaire qui le fera. A toi de voir.

    Au passage, je trouve ça assez étrange que dans une même entreprise vous utilisiez autant d'IDE différents pour une seule et même techno.

  7. #7
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Plusieurs IDE sont utilisés, car plusieurs compilateurs pour des micro-contrôleurs différents.

    Le but est plutôt de migrer progressivement tous les soft, en faisant participer les gens de façon aussi à ce qu'ils comprennent que coder moche, c'est mal.
    Les forcer à indenter, espacer, accolader, ... correctement, cela pourrait être long dans des fichiers de 15000 lignes (oui, je sais !). S'ils doivent juste cliquer sur un bouton, c'est à la fois pas très compliqué, et en même temps, la démarche y est.

    Merci

  8. #8
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Je suggère de simplement supprimer les espaces avant certains caractères :
    Motif de recherche :
    Motif de remplacement :
    Donne pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FonctionAvant  (PARA1       , PARA2  | Truc        , PARA3     )   ;
    Le résultat suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FonctionAvant(PARA1, PARA2  | Truc, PARA3);
    Et ce, quelque soit le nom de la fonction.
    Cela te convient ?

  9. #9
    Membre Expert Avatar de Er3van
    Homme Profil pro
    Architecte Logiciel
    Inscrit en
    Avril 2008
    Messages
    1 430
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Architecte Logiciel
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2008
    Messages : 1 430
    Par défaut
    Citation Envoyé par jacklafrip Voir le message
    Plusieurs IDE sont utilisés, car plusieurs compilateurs pour des micro-contrôleurs différents.
    Pour compiler ok, mais pour le développement ?

  10. #10
    Membre éclairé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2006
    Messages
    245
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Juin 2006
    Messages : 245
    Par défaut
    Citation Envoyé par Er3van Voir le message
    Pour compiler ok, mais pour le développement ?
    Mes collègues utilisent leur IDE (Keil, Eclipse, ...) pour développer, compiler, simuler puis tester sur cible avec points d'arrêts, ...
    Personnellement, j'utilise vi comme IDE.
    Et Visual Studio, c'est cher.

    Citation Envoyé par neilbgr Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FonctionAvant(PARA1, PARA2  | Truc, PARA3);
    Et ce, quelque soit le nom de la fonction.
    Cela te convient ?
    Oui, cela me convient, mais sous-entend deux passages. L'un pour enlever les espaces, l'autre pour remplacer le nom de la fonction, modifier le nombre de paramètres, l'ordre, ...

    Néanmoins, j'ai trouvé une solution pour rester sur l'expression régulière de la mort qui tue:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Regex MyRegex = new Regex(@"\s*([/]*)\s*FonctionAvant\s*\(\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*,\s*(.*?)\s*\)\s*;\s*");
    NewLine = MyRegex.Replace(Line, "$1FonctionApres($2, $3, $4, $5);");
    Au lieu d'écrire (\S*), il suffit d'écrire : (.*?)
    Le ? veut dire "le moins d'éléments possible". Donc les éléments de type \s s'agrandissent au maximum, en prenant le pas sur les autres, même si un "\s" est un "."
    L'explication se trouve ici : http://msdn.microsoft.com/fr-fr/libr...4%28v=vs.80%29

    Merci à tous.

  11. #11
    Rédacteur
    Avatar de Nathanael Marchand
    Homme Profil pro
    Expert .Net So@t
    Inscrit en
    Octobre 2008
    Messages
    3 615
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Expert .Net So@t
    Secteur : Conseil

    Informations forums :
    Inscription : Octobre 2008
    Messages : 3 615
    Par défaut
    Pour tester des expressions régulières, tu peux télécharger le super utilitaires "expresso" qui est gratuit en plus

  12. #12
    Membre émérite
    Avatar de neilbgr
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Août 2004
    Messages
    651
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Août 2004
    Messages : 651
    Par défaut
    Citation Envoyé par jacklafrip Voir le message
    Le ? veut dire "le moins d'éléments possible". Donc les éléments de type \s s'agrandissent au maximum, en prenant le pas sur les autres, même si un "\s" est un "."
    L'explication se trouve ici : http://msdn.microsoft.com/fr-fr/libr...4%28v=vs.80%29
    Je m'excuse d'avance auprès des modos qui n'aiment pas qu'on fasse des références externes, mais le site suivant est mon préféré en ce qui concerne les expression rationnelle : http://www.regular-expressions.info/reference.html

    Et pour le coup, c'est la notion de "lazy" = "paresse" (pour pas dire féniasse).

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

Discussions similaires

  1. [RegEx] Expression régulière pour code HTML et saut de ligne
    Par mastergalaxy dans le forum Langage
    Réponses: 3
    Dernier message: 19/04/2014, 08h54
  2. Réponses: 7
    Dernier message: 02/11/2010, 13h36
  3. Expressions régulières pour rechercher dans le code
    Par Davboc dans le forum Eclipse Java
    Réponses: 4
    Dernier message: 20/11/2007, 11h03
  4. Expressions régulières pour filtrer du code HTML
    Par Junta dans le forum Collection et Stream
    Réponses: 3
    Dernier message: 14/11/2006, 17h00
  5. Expression Régulière pour float
    Par zebiloute dans le forum Langage
    Réponses: 5
    Dernier message: 26/09/2005, 14h03

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