IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

récupérer les nombres d'une RichTextBox [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut récupérer les nombres d'une RichTextBox
    Bonjour,

    Voila presque 2 jours que je cherche une solution. je n'en peux plus.

    voila mon problème :

    j'ai une RichTextBox avec ce genre d'entrées :
    2.65 98.6 35 6.5 26.4
    j'aimerai :
    - récupérer chaque nombre pour les insérer dans une collection ( séparés par un [ESPACE] ou [ENTREE] ).
    - mettre en rouge les textes non numériques et en vert ceux qui sont numériques.
    - tout cela ce fera à la validation de la RTB.
    - Et convertir les virgules par des points (2,65 -> 2.65)

    Quelqu'un peut m'aider?

    merci d'avance!

  2. #2
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Pour extraire les nombres, utilise une expression régulière :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Dim matches As MatchCollection = Regex.Matches(richTextBox1.Text, "(\d*\.)?\d+")
    For Each m As Match in matches
        Dim d As Double = Double.Parse(m.Value, CultureInfo.InvariantCulture)
        list.Add(d)
    Next

  3. #3
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut
    je vais tester ça de suite!! merci.

    mais est-ce que ce serait possible de m'expliquer ces lignes..?

    je débute dans le VB.NET donc je ne connais pas encore grand chose..

  4. #4
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Helicoid Voir le message
    mais est-ce que ce serait possible de m'expliquer ces lignes..?
    Qu'est-ce que tu comprends pas exactement ?
    Une expression régulière cherche toutes les parties du texte qui correspondent à un certain motif. Je parcours toutes les correspondances ("match" en anglais), et pour chacune je convertis le texte de cette correspondance en un nombre (avec Double.Parse). Je précise qu'il faut utiliser la culture neutre (InvariantCulture) pour qu'il utilise bien le point comme séparateur décimal (vu qu'en français c'est une virgule)

  5. #5
    Membre averti
    Homme Profil pro
    Inscrit en
    Février 2012
    Messages
    16
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Seine et Marne (Île de France)

    Informations forums :
    Inscription : Février 2012
    Messages : 16
    Par défaut
    merci, je comprends mieux avec la version développée.
    voila mes questions supplémentaires :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim matches As MatchCollection = Regex.Matches(richTextBox1.Text, "(\d*(\.|,))?\d+")
    qu'est ce qu'une MatchCollection ?
    c'est " Regex.Matches() " qui effectue la recherche?
    les "(\d*(\.|,))?\d+", ce sont des codes correspondants aux symboles?

    sinon,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    For Each m As Match In matches
    c'est quoi une Match ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim text As String = m.Value.Replace(","C, "."C)
    Enfin un truc que je comprends presque
    mais pourquoi les "C"?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim value As Double = Double.Parse(text, CultureInfo.InvariantCulture)
    Pourquoi utiliser "Double.Parse()" et pas "CDbl()"?
    "CultureInfo.InvariantCulture" ne sert que pour les " . "?

    désolé pour toutes ces questions mais il n'y a pas tout dans VB.NET pour les nuls..
    Et il vaut mieux comprendre ce qu'on écrit..

  6. #6
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par Helicoid Voir le message
    qu'est ce qu'une MatchCollection ?
    Une collection de Match (= correspondance), comme son nom l'indique...

    Citation Envoyé par Helicoid Voir le message
    c'est " Regex.Matches() " qui effectue la recherche?
    Oui, ça renvoie une collection de correspondances ( = parties du texte qui correspondent au pattern)

    Citation Envoyé par Helicoid Voir le message
    les "(\d*(\.|,))?\d+", ce sont des codes correspondants aux symboles?
    En gros, oui, mais je vais pas te faire un cours complet sur les regex, ce serait un peu long... je vais juste t'expliquer celle là

    D'abord la fin parce que c'est le plus simple :
    - "\d" signifie "un chiffre" (n'importe lequel)
    - "+" signifie "au moins une occurrence"
    Donc "\d+" signifie "au moins un chiffre"

    Le début :
    - "?" signifie "zéro ou une occurrence"
    - les parenthèses sont suivies de "?", donc ca veut dire que tout le contenu des parenthèses doit apparaitre 0 ou 1 fois

    Le contenu des parenthèses :
    - "*" signifie "n'importe quel nombre d'occurrences", donc "\d*" signifie "n'importe quel nombre de chiffres"
    - "|" indique un choix, donc "(\.|,)" signifie : soit "\.", soit "," (le point est échappé à l'aide d'un "\" car sinon il signifie "n'importe quel caractère")

    Donc globalement, l'expression peut "matcher" :
    - un entier : 123
    - un décimal sans partie entière : .123
    - un décimal avec partie entière : 4.123

    Il y a un tuto complet ici si ça t'intéresse : http://stormimon.developpez.com/dotn...ns-regulieres/

    Citation Envoyé par Helicoid Voir le message
    c'est quoi une Match ?
    }
    Déjà expliqué plus haut

    Citation Envoyé par Helicoid Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim text As String = m.Value.Replace(","C, "."C)
    Enfin un truc que je comprends presque
    mais pourquoi les "C"?
    Le C après la chaine indique que ce n'est pas une chaine mais un caractère.


    Citation Envoyé par Helicoid Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim value As Double = Double.Parse(text, CultureInfo.InvariantCulture)
    Pourquoi utiliser "Double.Parse()" et pas "CDbl()"?
    "CultureInfo.InvariantCulture" ne sert que pour les " . "?
    Parce que CDbl c'est un vieux machin hérité de VB6 ; la seule raison pour laquelle ça existe encore, c'est pour faciliter la migration de vieux programmes en VB6. En .NET on utilise Double.Parse. En fait j'ai écrit le code en C# avant de le convertir automatiquement en VB.NET, et en C# CDbl n'existe pas...

    Citation Envoyé par Helicoid Voir le message
    Et il vaut mieux comprendre ce qu'on écrit..
    Voilà un bon état d'esprit
    Mais y a plein de gens qui ne semblent pas être de cet avis

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Exemple un peu plus complet qui fait aussi la coloration :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Private Sub richTextBox1_Validating(ByVal sender As Object, ByVal e As CancelEventArgs) Handles richTextBox1.Validating
    	richTextBox1.ForeColor = Color.Red
    	Dim matches As MatchCollection = Regex.Matches(richTextBox1.Text, "(\d*(\.|,))?\d+")
    	For Each m As Match In matches
    		Dim text As String = m.Value.Replace(","C, "."C)
    		Dim value As Double = Double.Parse(text, CultureInfo.InvariantCulture)
    		numbers.Add(value)
    		richTextBox1.SelectionStart = m.Index
    		richTextBox1.SelectionLength = m.Length
    		richTextBox1.SelectionColor = Color.Green
    		richTextBox1.SelectedText = text
    	Next
    End Sub

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Récupérer les nombres d'une chaine de caractères ?
    Par supman33 dans le forum Débuter
    Réponses: 5
    Dernier message: 21/06/2012, 16h55
  2. [E-07] Récupérer les nombres d'une liste filtrée
    Par aalex_38 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 09/06/2009, 14h44
  3. [VB.NET] Récupérer les caractéristiques d'une couleur
    Par leSeb dans le forum Windows Forms
    Réponses: 6
    Dernier message: 15/08/2004, 15h03
  4. [Servlet] récupérer les champs d'une jsp
    Par phoebe dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 12/05/2004, 16h32

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo