Private Sub FindReplace() Dim path As String = Application.StartupPath & "\test" Dim txtFiles() As String = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) 'répère le nom des fichiers dans le répertoire et sous les répertoires Dim mot As String = "coucou" 'le mot à trouver Dim remplacement As String = "Remplacé" For Each fichier As String In txtFiles Dim texte As String = File.ReadAllText(fichier) Dim motEntierRespecteLaCasse As New Regex("(^|\W)" & mot & "($|\W)") 'le patern dit que l'on cherche le mot avec un début de texte ou un caractères non alphanumérique avant et un fin de texte ou un caractère non alpha numérique après 'si on utilise le Replace(string, string) les eventuels espaces ou signes de ponctuation avant et apres seront remplacé, il faut donc délégué une fonction qui précise que l'on ne remplace que le mot Dim texte1 As String = motEntierRespecteLaCasse.Replace(texte, Function(match) match.Value.Replace(mot, remplacement)) 'retourne le texte trouvé par la regex dans lequel on change mot par remplacement 'le patern dit que l'on cherche le mot avec un début de texte ou un caractères non alphanumérique avant et un fin de texte ou un caractère non alpha numérique après et on ignore la case Dim texte2 As String = Regex.Replace(texte, "(^|\W)" & mot & "($|\W)", Function(match) Dim resultat As String = Regex.Replace(match.Value, mot, remplacement, RegexOptions.IgnoreCase) Return resultat End Function, RegexOptions.IgnoreCase) 'retourne le texte trouvé par la regex dans lequel on change mot par remplacement en ingorant la casse, ne marche plus avec stirng.replace nécessite une autre regex Dim IgnoreLaCasse As New Regex(mot, RegexOptions.IgnoreCase) 'le patern dit que l'on cherche le mot entier ou pas en ignorant la case Dim texte3 As String = IgnoreLaCasse.Replace(texte, remplacement) File.WriteAllText(fichier.Replace(".txt", "-1.txt"), "Mot entier, respecte la casse." & Environment.NewLine & texte1) File.WriteAllText(fichier.Replace(".txt", "-2.txt"), "Mot entier, ignore la casse." & Environment.NewLine & texte2) File.WriteAllText(fichier.Replace(".txt", "-3.txt"), "Mot ignore la casse." & Environment.NewLine & texte3) File.WriteAllText(fichier.Replace(".txt", "-4.txt"), "Mot respecte la casse." & Environment.NewLine & texte.Replace(mot, remplacement)) 'ici on utilise string.Replace qui remplace toute occurence du texte exact Next fichier End Sub
coucou coucou coucou
coucou, Coucou.
1coucou deux coucous trois COUcous 4COUcous
coucou coucou.Toto() coucoule deuxième coucou passe toujours à la trappe.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre questiontoto = "coucou, aaaa coucou bbbb. coucoucc iiii coucou! aaaa coucou"
tata = Split(" " & toto & " ", "coucou")
For i = 0 To UBound(tata) - 1
Select Case Left(tata(i + 1), 1)
Case ",", " ", "!"
If Right(tata(i), 1) = " " Then
tata(i + 1) = "#" & tata(i + 1)
End If
End Select
Next
toto = Trim(Replace(Join(tata, "coucou"), "coucou#", "voila"))
MsgBox toto
toto = "coucou, aaaa coucou bbbb. coucoucc iiii coucou! cccc coucou aaaa coucou"
tata = Split(" " & toto & " ", "coucou")
For i = 0 To UBound(tata) - 1
Select Case Left(tata(i + 1), 1)
Case ",", " ", "!", ":", ";", "?"
If Right(tata(i), 1) = " " Then
tata(i + 1) = Chr(1) & tata(i + 1)
End If
End Select
Next
toto = Trim(Replace(Join(tata, "coucou"), "coucou" & Chr(1), "voila"))
msgbox toto
Dim tab = {"coucou"} 'le mot à trouver car le split marche avec un tableau Dim mot As String = "coucou" Dim tata As String() = texte.Split(tab, StringSplitOptions.None)'le texte est déjà chargé dans la variable texte de type string For i = 0 To tata.Length - 2 Dim caractereSuivant As String If tata(i + 1) <> "" Then 'pour s'affranchir du dernier "" caractereSuivant = tata(i + 1).Substring(0, 1) Else caractereSuivant = "" End If Select Case caractereSuivant Case ",", " ", "!", ":", ";", "?", "" If tata(i) = "" Then 'pour s'affranchir du premier "" tata(i + 1) = "#" & tata(i + 1) Else If tata(i)(tata(i).Length - 1) = " " Then tata(i + 1) = "#" & tata(i + 1) End If End If End Select Next i
toto = "coucou, aaaa coucou bbbb. coucoucc iiii coucou! " & _
"cccc coucou aaaa coucou" & vbCrLf & "coucou bbb"
tata = Split(" " & toto & " ", "coucou")
For i = 0 To UBound(tata) - 1
Select Case Left(tata(i + 1), 1)
Case ",", " ", "!", ":", ";", "?", Chr(10), Chr(13) '===>> ICI
Select Case Right(tata(i), 1)
Case " ", Chr(10), Chr(13) ' ====>>> ET LA
tata(i + 1) = Chr(1) & tata(i + 1)
End Select
End Select
Next
toto = Trim(Replace(Join(tata, "coucou"), "coucou" & Chr(1), "voila"))
MsgBox toto
voila, aaaa voila bbbb. coucoucc iiii voila! cccc voila aaaa voila
voila bbb
Private Sub FindReplaceDeuxPasses() Dim path As String = Application.StartupPath & "\test" Dim txtFiles() As String = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) 'répère le nom des fichiers dans le répertoire et sous les répertoires Dim mot As String = "coucou" 'le mot à trouver Dim remplacement As String = "Remplacé" Dim monOption As RegexOptions = RegexOptions.None 'ici on choisi entre None et IgnoreCase Dim motEntier As Boolean = True 'ici on choisit mot entier ou pas For Each fichier As String In txtFiles Dim texte As String = File.ReadAllText(fichier) Dim nouveauTexte As String If motEntier Then nouveauTexte = Regex.Replace(texte, "(^|\W)" & mot & "($|\W)", Function(match) match.Value.Replace(mot, remplacement), monOption) 'retourne le texte trouvé par la regex dans lequel on change mot par remplacement nouveauTexte = Regex.Replace(nouveauTexte, "(^|\W)" & mot & "($|\W)", Function(match) match.Value.Replace(mot, remplacement), monOption) 'retourne le texte trouvé par la regex dans lequel on change mot par remplacement Else nouveauTexte = Regex.Replace(texte, mot, remplacement, monOption) End If File.WriteAllText(fichier.Replace(".txt", "-1.txt"), nouveauTexte) Next fichier End Sub
Private Sub FindReplaceAvecSplit() Dim path As String = Application.StartupPath & "\test" Dim txtFiles() As String = Directory.GetFiles(path, "*.*", SearchOption.AllDirectories) 'répère le nom des fichiers dans le répertoire et sous les répertoires Dim mot As String = "coucou" 'le mot à trouver Dim remplacement As String = "Remplacé" Dim monOption As RegexOptions = RegexOptions.None 'ici on choisi entre None et IgnoreCase Dim motEntier As Boolean = True 'ici on choisit mot entier ou pas For Each fichier As String In txtFiles Dim texte As String = File.ReadAllText(fichier) Dim nouveauTexte As String If motEntier Then Dim maRegex As New Regex(mot, monOption) 'parttern qui recherche juste le mot Dim matches As MatchCollection = maRegex.Matches(texte) ' retourne la collection des occurences Dim split() As String = texte.Split({mot}, StringSplitOptions.None) Dim indexSplit As Integer = 0 nouveauTexte = split(indexSplit) indexSplit += 1 For Each m As Match In matches 'extrait de texte Dim index As Integer = If(m.Index > 0, m.Index - 1, 0) 'on prend un caractère avant l'occurence si c'est possible Dim longueur As Integer = If(m.Index + m.Length < texte.Length, m.Length + 2, texte.Length - index) 'l'extrait de texte ne doit pas depasser le texte Dim extrait As String = texte.Substring(index, longueur) Dim pattern As String = String.Format("(\W{0}\W)|(^{0}\W)|(\W{0}$)|(^{0}$)", mot) If Regex.IsMatch(extrait, pattern) Then nouveauTexte &= remplacement Else nouveauTexte &= mot End If If indexSplit < split.Length Then nouveauTexte &= split(indexSplit) indexSplit += 1 End If Next m Else nouveauTexte = Regex.Replace(texte, mot, remplacement, monOption) End If File.WriteAllText(fichier.Replace(".txt", "-1.txt"), nouveauTexte) Next fichier End Sub
10 févr. 2015 à 00:35