Chercher et remplacer une chaine de charactere exacte ?

micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013 - 8 sept. 2009 à 17:29
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 - 15 sept. 2009 à 00:00
Bonjour, je cherche a remplacer dans un fichier xml ou peu importe une chaine precise du genre VB1 par VB2
le problem c'est que ma method remplace tous les VB1
y compris VB10, VB11
comment trouver et remplacer VB1 et VB1 seulement ?


public void ReplaceID(string SearchFor, string ReplaceWith) // OK
{ // this method use StreamReader, StreamWriter, and Regex to replace a string SearchFor
// by a string ReplaceWith

//get a StreamReader for reading the file
StreamReader reader = new StreamReader(Datapath);
//read the entire file at once
string contents = reader.ReadToEnd();
//close up and dispose
reader.Close();
reader.Dispose();
//use regular expressions to search and replace our text
contents = Regex.Replace(contents, SearchFor, ReplaceWith);
//get a StreamWriter for writing the new text to the file
StreamWriter writer = new StreamWriter(Datapath);
//write the contents
writer.Write(contents);
//close up and dispose
writer.Close();
writer.Dispose();

12 réponses

Miltiades Messages postés 233 Date d'inscription vendredi 21 mars 2003 Statut Membre Dernière intervention 25 octobre 2010
8 sept. 2009 à 18:44
formate correctement ton expression régulière...
il existe des caractères spéciaux en regex pour indiquer un début de chaine et une fin de chaine
en perl on a:

/^toto$/


tu dois avoir quelque chose d'approchant en C#...

Nul ne devient grand par la guerre...
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
8 sept. 2009 à 19:21
Hello,
Regex.Replace(text, @"\bVB1\b", "VB2");



[hr]
-Blog-
-Site Perso-
0
micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013
9 sept. 2009 à 10:12
salut, merci pour vos reponse, j'ai essayé ta methode Bidou, mais avec un String a la place de \bVB1\b et il ne le detecte pas :(
que signifient les \b ? doijent les inclures du genre \bSTRING\b ou STRING = \bVB1\b ?

merci
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
10 sept. 2009 à 08:39
\b permet de définir un mot (d'après les espaces).
En d'autres termes, '\btest\b' sera trouvé dans "ceci est un test ok" mais pas dans "il faut tester ceci" (pas contre ça marchera avec '\btest')



[hr]
-Blog-
-Site Perso-
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013
10 sept. 2009 à 09:25
et si j'essaye le Count? car mon VB1 apparait avant mon VB10, saurais tu la syntaxe ? desole je suis pas tres fort, mais merci d'avance
0
cs_Bidou Messages postés 5487 Date d'inscription dimanche 4 août 2002 Statut Membre Dernière intervention 20 juin 2013 61
11 sept. 2009 à 15:16
Je ne comprend pas trop ton problème.
Si tu veux remplacer VB1, tu mets \bVB1\b !



[hr]
-Blog-
-Site Perso-
0
micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013
11 sept. 2009 à 15:35
(re) Salut Bidou

mon xml est du genre
admettons que je veuilles remplacer Data1 (en rouge) par DataX
<Datas>
<Datas1>
<Datas11>
<Datas111>
<Datas112>
<Datas1121> Attr1121 "XXX" Attr1122 "YYY" </Datas1121>
<Datas2>
<Datas21>
<Datas211> Attr2111 "ZZZ" Attr2112 "AAA" </Datas211>
<Datas3>
<Datas31>

en utilisant \bData1\b il me prends tous les Data1 qu'il trouve (tous ceux en italique), or je veux changer juste le rouge

merci :)
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
12 sept. 2009 à 22:28
Comment te débrouille-tu ?

T'as ce code :

public void ReplaceID(string SearchFor, string ReplaceWith) // OK 
{ // this method use StreamReader, StreamWriter, and Regex to replace a string SearchFor 
// by a string ReplaceWith 

//get a StreamReader for reading the file 
StreamReader reader = new StreamReader(Datapath); 
//read the entire file at once 
string contents = reader.ReadToEnd(); 
//close up and dispose 
reader.Close(); 
reader.Dispose(); 
//use regular expressions to search and replace our text 
contents = Regex.Replace(contents, SearchFor, ReplaceWith); 
//get a StreamWriter for writing the new text to the file 
StreamWriter writer = new StreamWriter(Datapath); 
//write the contents 
writer.Write(contents); 
//close up and dispose 
writer.Close(); 
writer.Dispose();
}


et pour t'en servir tu fais :

ReplaceId(@"\bVB1\b", "VB2");

ça fonctionne très bien
0
micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013
14 sept. 2009 à 09:36
Salut MasterShadows et merci de t'interessé a mes problemes
effectivement ca marche tres bien avec

ReplaceId(@"\bVB1\b", "VB2");

mais si je veux "customiser" et pouvoir changer de string du genre;

string SearchFor = "\bVB1\b";
string ReplaceWith = "VB2";
ReplaceID(@SearchFor, ReplaceWith);

ca ne detecte plus VB1...

une idée pour ce probleme ?
merci beaucoup
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
14 sept. 2009 à 18:57
Astuce : remplace cette ligne :

contents = Regex.Replace(contents, SearchFor, ReplaceWith);

par

contents = Regex.Replace(contents, string.Format("\\b{0}\\b", SearchFor), ReplaceWith);

Comme ça tu t'embêtes plus avec le \b

et ainsi tu fais :

string searchFor = "VB1";
string ReplaceWith = "VB2";

ReplaceID(searchFor, ReplaceWith);


Voili Voilou
0
micbristol Messages postés 36 Date d'inscription dimanche 23 décembre 2007 Statut Membre Dernière intervention 24 février 2013
14 sept. 2009 à 21:13
ca marche nikel, c'est beau d'apprendre
merci beaucoup :)

si tu t'embetes et que tu te debruilles aussi bien en XML
alors visite http://www.csharpfr.com/forum/sujet-XPATH-AMATEUR_1356502.aspx#6

en tout cas merci beaucoup
:)

mick
0
MasterShadows Messages postés 268 Date d'inscription lundi 1 mars 2004 Statut Membre Dernière intervention 19 avril 2012 12
15 sept. 2009 à 00:00
De rien, c'est le but du site
0
Rejoignez-nous