Menu

Utilisé une regex pour remplacer des occurrences [Résolu]

Messages postés
265
Date d'inscription
mardi 24 février 2015
Dernière intervention
23 janvier 2019
- - Dernière réponse : Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
- 23 janv. 2019 à 12:44
Bonjour,

je suis exactement dans le même cas de figure que ce poste :
https://stackoverflow.com/questions/6143642/way-to-have-string-replace-only-hit-whole-words

je cherche a remplacer un mot entier par un autre sans modifier les autre qui sont similaire.
par exemple :
j'ai un tableau qui contient -> FR / Francais / Fr / Francois / Fromage / fR

je veut remplacer chaque occurrence du mot "FR" (sans prend en compte la case) par "FRANCE" mais ne pas modifier les autres mot qui comprenne pourtant les lettre "fr" .


voici donc mon bout de code que j'ai adapter avec la réponse donné sur Stackoverflow.

string[] replaces = File.ReadAllLines(Globals.REFPATH);   (mon fichier input)

            string content = File.ReadAllText(Globals.FILEMAJ);    (mon fichier output)

            foreach (string s in replaces)
            {
                string[] r = s.Split(';');
                if (r.Length > 1 && !string.IsNullOrWhiteSpace(r[0]) && !string.IsNullOrWhiteSpace(r[1]))
                {
                    string pattern = @"\b" + r[0] + "\b";

                    MessageBox.Show(pattern + "  ->  " + r[1]);

                    content = Regex.Replace(content, pattern, r[1]);

                }
            }


cela me semble correct et pourtant ca ne fonctionne pas ....
des idées ?


PS : si par miracle vous savez comment faire apparaître la console VS lors de l’exécution je suis preneur.
je suis actuellement obliger de debug avec des messageBox (c'est pas ultra ouf).

merci

Configuration: Windows / Chrome 71.0.3578.98
Afficher la suite 

Votre réponse

2 réponses

Meilleure réponse
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458
1
Merci
La regex maintenant, il y a de nombreux sites qui permettent de tester les regex. L'avantage est de voir instantanément le résultat de son pattern.

Comme il y a quelques différences d'implémentations d'un langage à l'autre, je te conseille regexstorm.net qui applique l'implémentation .Net

http://regexstorm.net/tester?p=%5Cbfr%5Cb&i=+FR+%2F+Francais+%2F+Fr+%2F+Francois+%2F+Fromage+%2F+fR+&r=FRANCE&o=i

Clique sur l'onglet Context pour voir le résultat. Tu remarqueras que j'ai coché "IgnoreCase" et "Replace with"

Et voilà l'implémentation en C#
string res = Regex.Replace("FR / Francais / Fr / Francois / Fromage / fR ", @"\bfr\b", "France", RegexOptions.IgnoreCase);


Quand j'étais petit, la mer Morte n'était que malade.
George Burns

Dire « Merci » 1

Heureux de vous avoir aidé ! Vous nous appréciez ? Donnez votre avis sur nous ! Evaluez CommentCaMarche

CCM 58426 internautes nous ont dit merci ce mois-ci

Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458 -
Le traitement ligne par ligne est cohérent.
Par contre dans l’absolue t’as pas besoin d’un second fichier pour ça
astrocurieux
Messages postés
265
Date d'inscription
mardi 24 février 2015
Dernière intervention
23 janvier 2019
3 -
Si tu as une seconde manière de voir la chose, cela m'intéresse.

Ce second fichier est créé pour dans un premier temps servir de référence pour la correction mais également pour être réutilisable. Si un jours je décide de re corriger une seconde fois mon F1 je n'aurais pas besoin à nouveau de tous réécrire dans mon f2.

Mais je reste à ton écoute si tu as mieux à proposer. Dans tout les cas merci de ton suivie et de ta rapidité de réponse.
Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458 -
Tu peux éventuellement charger la colonne de F1 dans un datagridview à 2 colonnes.
Remplir les corrections dans la seconde colonne, les appliquer et demander si l'utilisateur veut sauvegarder les corrections.
Ca limite les accès disques.
astrocurieux
Messages postés
265
Date d'inscription
mardi 24 février 2015
Dernière intervention
23 janvier 2019
3 -
ça peut effectivement être une solution. faudrait que je test pour voir si ça rend le tout plus rapide.
Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458 -
Je ne pense pas que tu verras la différence de temps.
Le truc c’est que tu n’auras pas à ouvirs excel ou notepad pour le csv et ton programme en même temps
Commenter la réponse de Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458
0
Merci
Bonsoir,

commençons par la fin
PS : si par miracle vous savez comment faire apparaître la console VS lors de l’exécution je suis preneur.
je suis actuellement obliger de debug avec des messageBox (c'est pas ultra ouf).


Entre la console, qui n'est franchement utile pour débuguer que si le code doit s'exécuter vite et sans interruption (traitement d'un flux par exemple), et le messagebox il y a quand même tout un tas d'outils de débug, des vrais proposés par VS.
https://openclassrooms.com/fr/courses/1526901-apprenez-a-developper-en-c/2867766-utilisez-le-debogueur

Pour débusquer un code comme celui que tu présentes, un point d'arrêt, des espions et éventuellement un peu de pas à pas est bien plus efficace.


astrocurieux
Messages postés
265
Date d'inscription
mardi 24 février 2015
Dernière intervention
23 janvier 2019
3 -
c'est justement dans l'optique d'avancer pas a pas que je voudrais pouvoir de nouveau utilisé la console lors de l’exécution avec l'aide de : Console.WriteLine .
or suite a une mauvaise manipulation je n'est plus rien lors de l’exécution pour me venir en aide ....
Whismeril
Messages postés
12723
Date d'inscription
mardi 11 mars 2003
Statut
Contributeur
Dernière intervention
15 février 2019
458 -
Non l’execution pas à pas ne se fait pas avec la console.
Lis le tuto que je t’ai mis en lien c’est bien expliqué.
astrocurieux
Messages postés
265
Date d'inscription
mardi 24 février 2015
Dernière intervention
23 janvier 2019
3 -
je vais me plonger dedans ce soir alors, je vais en avoir grand besoin sous peu ...
Commenter la réponse de Whismeril