Trouver le numéro de ligne par rapport au texte dans un Richtextbox ou Texbox

Résolu
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022 - 8 mai 2020 à 19:40
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022 - 8 mai 2020 à 23:32
Bonjour les amis,
J'ai des données qui sont mises à jour chaque seconde dans mon Richtextbox ou Textox (with multiline) pour lire et afficher des données à l'utilisateur comme ci-dessous:

data.......
Z search height: 5.00
Measured points:
0.16250 0.13722 0.10944 0.07917 0.04639 0.01111 -0.02667
0.17278 0.15751 0.13492 0.10500 0.06776 0.02319 -0.02870
0.17917 0.16930 0.14939 0.11944 0.07945 0.02942 -0.03065
0.18167 0.17259 0.15287 0.12250 0.08148 0.02981 -0.03250
0.18028 0.16739 0.14535 0.11417 0.07384 0.02436 -0.03426
0.17500 0.15368 0.12683 0.09444 0.05652 0.01307 -0.03593
0.16583 0.13148 0.09731 0.06333 0.02954 -0.00407 -0.03750
ok
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
data..........


J'ai besoin de récupérer les 7 lignes de nombre qui se trouvent entre le texte "Measured points:" et "ok"

Je me demande s'il est possible de récupérer le numéro de ligne "Measured points:" pour avoir un repère et lire les 7 lignes suivantes ?
Sinon, quelle serait la meilleure solution pour isoler ces données?

Merci beaucoup pour votre aide

14 réponses

Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 22:03
Avec cette nouvelle syntaxe
(?<=Measured points: \r\n)(.*?)(?=ok)
Ça s’arrête au premier OK, qu’il y ait une ou 20 lignes
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 23:06
Oui, au lieu de Regex.Match, tu utilises Regex.Matches, et tu prends le dernier de la collection
1
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 19:59
Bonjour

Avec cette regex
(?<=Measured points: \r\n)(.*)(?=ok)


Voir un exemple en copiant collant le lien ci après
http://regexstorm.net/tester?p=%28%3f%3c%3dMeasured+points%3a+%5cr%5cn%29%28.*%29%28%3f%3dok%29&i=data.......+%0d%0aZ+search+height%3a+5.00+%0d%0aMeasured+points%3a+%0d%0a0.16250+0.13722+0.10944+0.07917+0.04639+0.01111+-0.02667+%0d%0a0.17278+0.15751+0.13492+0.10500+0.06776+0.02319+-0.02870+%0d%0a0.17917+0.16930+0.14939+0.11944+0.07945+0.02942+-0.03065+%0d%0a0.18167+0.17259+0.15287+0.12250+0.08148+0.02981+-0.03250+%0d%0a0.18028+0.16739+0.14535+0.11417+0.07384+0.02436+-0.03426+%0d%0a0.17500+0.15368+0.12683+0.09444+0.05652+0.01307+-0.03593+%0d%0a0.16583+0.13148+0.09731+0.06333+0.02954+-0.00407+-0.03750+%0d%0aok+%0d%0aX%3a2.42+Y%3a-3.02+Z%3a0.15+E%3a0.00+Count+X%3a+0.00+Y%3a-4.00+Z%3a0.34+E%3a0.00+%0d%0adata..........+&o=s


Il faut activer l’option singleline et si un jour y’a pas 7 lignes ça marchera quand même.

Si tu ne sais pas ce qu’est une regex, voir ici https://lgmorand.developpez.com/dotnet/regex/
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
Modifié le 8 mai 2020 à 20:21
Bonsoir Whismeril,

Merci pour ta réponse qui m'a l'air top, j'essai de comprendre cette regex avec le lien que tu m'a donné (merci également pour cela).

Dans les exemples donné du cour se serait un "Découpage par séparateur" ou "Découpage par regroupement" ?

Je dirai découpage par séparateur ?
0

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

Posez votre question
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 20:33
C'est pas un découpage, juste une capture.
Et c'est vrai que ce cours n'en parle pas.... J'avais pas vérifié.

Il faut utiliser
Regex.Match
ou
Regex.Matches

https://docs.microsoft.com/fr-fr/dotnet/api/system.text.regularexpressions.regex.matches?view=netcore-3.1

0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
Modifié le 8 mai 2020 à 21:20
D'accord,

J'essai ceci :

Dim myString As String = Txt_data.Text
        Dim regex = New Regex("?<=Measured points: \r\n)(.*)(?=ok")
        Dim match = regex.Match(myString)
        If match.Success Then
       
            Txt_recup_point.Text = match.Value
        End If


mais j'ai du mal à comprendre comment assigné correctement le regex
?<=Measured points: \r\n)(.*)(?=ok


cela me retourne :
Une exception non gérée du type 'System.ArgumentException' s'est produite dans System.dll

Informations supplémentaires : analyse de "?<=Measured points: \r\n)(.*)(?=ok" - Quantificateur {x,y} ne suivant rien.

Peut-tu m'en dire un peu + sur l'utilisation ? :)
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 21:13
Depuis le temps tu pourrais utiliser correctement les balises de code.
C’est pénible à force.
Je te remets une fois de plus le lien vers le petit tuto sur le sujet.
https://codes-sources.commentcamarche.net/faq/11288-les-balises-de-code

Pour ton problème, la regex doit commencer par une parenthèse, tu ne l’as pas mise
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
8 mai 2020 à 21:21
Mes excuses pour le code, je ne comprend pas pour la parenthèse car elle y est après le regex ? ou alors je n'ai pas compris :(
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 21:29
Ha ben, elle manque à la fin aussi
Dim regex = New Regex("(?<=Measured points: \r\n)(.*)(?=ok)")

0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
Modifié le 8 mai 2020 à 21:35
C'est également ce que je vient d'essayer mais je n'ai aucun retour dans mon Txt_recup_point.Text

 Dim myString As String = Txt_data.Text
        Dim regex = New Regex("(?<=Measured points: \r\n)(.*)(?=ok)")
        Dim match = regex.Match(myString)
        If match.Success Then

            Txt_recup_point.Text = match.Value
        End If



Est-ce que le soucis pourrai venir des retours à la ligne ou l'espace devant chaque ligne ?

Z search height: 5.00
Measured points:
  0.16250  0.13722  0.10944  0.07917  0.04639  0.01111  -0.02667
  0.17278  0.15751  0.13492  0.10500  0.06776  0.02319  -0.02870
  0.17917  0.16930  0.14939  0.11944  0.07945  0.02942  -0.03065
  0.18167  0.17259  0.15287  0.12250  0.08148  0.02981  -0.03250
  0.18028  0.16739  0.14535  0.11417  0.07384  0.02436  -0.03426
  0.17500  0.15368  0.12683  0.09444  0.05652  0.01307  -0.03593
  0.16583  0.13148  0.09731  0.06333  0.02954  -0.00407  -0.03750
ok
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
0
Whismeril Messages postés 19026 Date d'inscription mardi 11 mars 2003 Statut Contributeur Dernière intervention 20 avril 2024 656
8 mai 2020 à 21:41
Ha oui, il faut mettre l’option SingleLine je te l’ai dit dès le premier message
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
8 mai 2020 à 21:55
voila :
    Dim myString As String = RichTextBox_data.Text
        Dim regex = New Regex("(?<=Measured points:)(.*)(?=ok)", RegexOptions.Singleline)
        Dim match = regex.Match(myString)
        If match.Success Then
            Txt_recup_point.Text = match.Value
        End If



En revanche comme j'ai d'autre "ok" qui sont placé après comme suit :
Num X,Y: 7,7
Z search height: 5.00
Measured points:
  0.16250  0.13722  0.10944  0.07917  0.04639  0.01111  -0.02667
  0.17278  0.15751  0.13492  0.10500  0.06776  0.02319  -0.02870
  0.17917  0.16930  0.14939  0.11944  0.07945  0.02942  -0.03065
  0.18167  0.17259  0.15287  0.12250  0.08148  0.02981  -0.03250
  0.18028  0.16739  0.14535  0.11417  0.07384  0.02436  -0.03426
  0.17500  0.15368  0.12683  0.09444  0.05652  0.01307  -0.03593
  0.16583  0.13148  0.09731  0.06333  0.02954  -0.00407  -0.03750
ok
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok


Il me prend en compte le dernier "ok" et je me retrouve donc avec ceci dans mon exemple :

  0.16250  0.13722  0.10944  0.07917  0.04639  0.01111  -0.02667
  0.17278  0.15751  0.13492  0.10500  0.06776  0.02319  -0.02870
  0.17917  0.16930  0.14939  0.11944  0.07945  0.02942  -0.03065
  0.18167  0.17259  0.15287  0.12250  0.08148  0.02981  -0.03250
  0.18028  0.16739  0.14535  0.11417  0.07384  0.02436  -0.03426
  0.17500  0.15368  0.12683  0.09444  0.05652  0.01307  -0.03593
  0.16583  0.13148  0.09731  0.06333  0.02954  -0.00407  -0.03750
ok
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00
ok
ok T:149.9 /150.0 B:60.9 /60.0 T0:149.9 /150.0 @:20 B@:14 P:59.3 A:31.7
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00


Est-ce que cela est "réglable" pour vraiment prendre en compte que le "ok" qui se situe juste apès les 7 lignes ?
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
8 mai 2020 à 21:46
ah d'accord je pensais que tu parlais du SingleLine à cocher uniquement sur le site http://regexstorm.net/

Bon je continue mes recherches pour ajouter cela :) Merci pour ces précisions
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
Modifié le 8 mai 2020 à 22:44
Génial ! merci

Dans le cas ou j'ai plusieurs Match comme ceci :

data....... 
Z search height: 5.00 
Measured points: 
 0.16250 0.13722 0.10944 0.07917 0.04639 0.01111 -0.02667 
 0.17278 0.15751 0.13492 0.10500 0.06776 0.02319 -0.02870 
 0.17917 0.16930 0.14939 0.11944 0.07945 0.02942 -0.03065 
 0.18167 0.17259 0.15287 0.12250 0.08148 0.02981 -0.03250 
 0.18028 0.16739 0.14535 0.11417 0.07384 0.02436 -0.03426 
 0.17500 0.15368 0.12683 0.09444 0.05652 0.01307 -0.03593 
 0.16583 0.13148 0.09731 0.06333 0.02954 -0.00407 -0.03750 
ok 
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00 
data.......... 
ok
data....... 
Z search height: 5.00 
Measured points: 
 0.16250 0.13722 0.10944 0.07917 0.04639 0.01111 -0.02667 
 0.17278 0.15751 0.13492 0.10500 0.06776 0.02319 -0.02870 
 0.17917 0.16930 0.14939 0.11944 0.07945 0.02942 -0.03065 
 0.18167 0.17259 0.15287 0.12250 0.08148 0.02981 -0.03250 
 0.18028 0.16739 0.14535 0.11417 0.07384 0.02436 -0.03426 
 0.17500 0.15368 0.12683 0.09444 0.05652 0.01307 -0.03593 
 0.16583 0.13148 0.09731 0.06333 0.02954 -0.00407 -0.03750 
ok 
X:2.42 Y:-3.02 Z:0.15 E:0.00 Count X: 0.00 Y:-4.00 Z:0.34 E:0.00 
data.......... 
ok



Est-il possible d'avoir toujours le dernier reçu ?
Merci beaucoup pour ton aide j'arrive enfin à avancer un peu :)
0
jerlo11 Messages postés 109 Date d'inscription mardi 19 mai 2015 Statut Membre Dernière intervention 17 novembre 2022
8 mai 2020 à 23:32
D'ac je vais chercher cela.
Merci pour toute l'aide apportée ;)
0
Rejoignez-nous