Bonjour,
J'ai résolu le problème avec l'exemple ci-dessous. Mais j'aimerais votre avis pour savoir si c'est la bonne méthode avec une chaine à analyser très longue (100 000 caractères par exemple). Si les seuls occurences "toto" sont très nombreuse (exemple 10000) cela va prendre un bout bout de temps !
Le but : rechercher la sous-chaine "toto......###" dans la chaine mère ou les 6 points peuvent être n'importe quel caractère. Comme cette fonction n'existe pas pour les chaines j'ai décomposer en deux phase : (1) rechercher si la chaine "toto" est présente (si oui on donne à index sa position) puis (2) vérifier si la chaine "###" est présente à l'index +10 ? Si oui OK. Donc ça sera une boucle dans une autre.
Dans l'exemple ci-dessous cette occurence ne se produit que deux fois (index 0 et index 51).
Ouvrir une form avec deux textbox en multilignes et un bouton pour visualiser le résultat.
Merci pour vos suggestions.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Imports System.Text.RegularExpressions Public Class Form1 Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click Dim text = "totoabcdef###totototoghitotojkl###mnopqrstuvwxyzabctotodefcde###ghijklm###" Dim rx = New Regex("toto", RegexOptions.IgnoreCase) Dim sx = New Regex("###", RegexOptions.IgnoreCase) Dim mc = rx.Matches(text) Dim sc = sx.Matches(text) Dim i, j, k As Integer 'recherche chaque occurance de "toto" For Each m As Match In mc i += 1 TextBox1.Text += Str(i) + " " + Str(m.Index.ToString) + vbCrLf 'recherche chaque occurance de "###" For Each s As Match In sc j += 1 TextBox2.Text += Str(j) + " " + Str(s.Index.ToString) + vbCrLf 'Vérifie si l'espace entre index "toto" et index "###" est bien égal à 10 If s.Index.ToString = m.Index.ToString + 10 Then k += 1 TextBox2.Text += "Concordance trouvée numéro " + Str(k) + vbCrLf End If Next Next End Sub End Class
A+
Partager