none
Récupérer les caractères numériques d'une chaine. RRS feed

  • Question

  • Bonjour,

    Existe t'il une fonction native pour travailler sur les chaines et renvoyer la valeur numérque contenue dans une chaine?

    Exemple : chaine = "toto2136", renvoie "2136"

    Merci.

    vendredi 18 novembre 2011 13:15

Réponses

  • Bonjour,

    Essayer ave le code suivant :

        Public Function ExtraireValeursNumeriques(chaine As String) As List(Of Long)
            Dim patternNumerique As String = "\d+"
            Dim matches = System.Text.RegularExpressions.Regex.Matches(chaine, patternNumerique)
            Dim valeursNumeriques As List(Of Long) = New List(Of Long)()
            For Each matche As System.Text.RegularExpressions.Match In matches
                valeursNumeriques.Add(Long.Parse(matche.Value))
            Next matche
    
            Return valeursNumeriques
        End Function
    

    Cordialement.

    • Proposé comme réponse Othman Azzouz vendredi 18 novembre 2011 18:25
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 17:38
    Auteur de réponse
  • Bonjour,

    ça dépend de ce que vous voulez faire, un autre exemple peut être "toto2page500", est-ce que vous voulez récupérer la suite ou bien la liste des nombres contenus dans la chaîne?

    Si vous avez besoin de la suite voici une fonction simple, vous allez devoir importer tout d'abord system.char

     

     

    Public Function returnNumbers(ByRef str As String) As Long
    
            Dim i As Integer
            Dim aux As String = ""
    
            For i = 0 To Len(str) - 1
                If IsDigit(str(i)) Then
                    aux += str(i)
                End If
            Next
    
            Return Convert.ToInt64(aux)
    
    End Function


     


    • Modifié Othman Azzouz vendredi 18 novembre 2011 18:21
    • Proposé comme réponse Othman Azzouz vendredi 18 novembre 2011 18:25
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 17:49
  • Bonjour Marcel n°D22

     

    Et bien moi je te propose la méthode classique :

     

    Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      Dim texte As String = "Maître 1234 corbeau -3,06" ' chaîne test

      Dim i As Integer

      Dim ascii As Integer

      Dim numerique As String = ""

      For i = 1 To Len(texte)

        ascii = Asc(Mid(texte, i, 1))

        If (ascii > 43 And ascii < 47) Or (ascii > 47 And ascii < 58) Then numerique = numerique & Mid(texte, i, 1)

      Next

      MsgBox("Chaîne de départ : " & texte & vbLf & "Numériques : " & numerique, vbInformation)

      End

    End Sub

     

    Ce qui donne :

    Chaîne de départ : Maître 1234 corbeau -3,06

    Numériques : 1234-3,06

    Cordialement :o)



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

    • Proposé comme réponse EhJoe vendredi 18 novembre 2011 21:10
    • Modifié EhJoe vendredi 18 novembre 2011 21:10
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 19:22

Toutes les réponses

  • Bonjour,

    vous pouvez utiliser les expressions regulière pour cela. En VB.Net RegularExpression

     Vous trouverez un exemple de ce que vous souhaitez ici : How To: Extract numbers from string

    Cordialement

     

    vendredi 18 novembre 2011 15:23
    Modérateur
  • Bonjour,

    A priori non (la fonction Val prends je pense les *premiers* caractères numériques et convertit) donc je pense qu'il faudra la créer ce qui est assez facile (pour "to12to54" si c'est possible on prends 12, 54, 1254 ?).

    Si c'est en liaison avec votre question précédente, je vous suggère donc fortement d'expliquer ce que vous essayez de faire. Cela me donne l'impression que vous pourriez essayer de traiter des variables toto1, toto2, toto3 de façon automatique (d'où l'appel en fonction d'un nom et peut-être le découpage ci-dessus ???) ce qui peut être fait avec un "tableau" (une variable qui a un nom et dont les différentes "cases" sont indiquées avec un numéro ce qui permet de traiter facilement plusieurs valeurs de même type)).

     


    Please always mark whatever response solved your issue so that the thread is properly marked as "Answered".
    vendredi 18 novembre 2011 15:31
    Modérateur
  • Bonjour,

    Essayer ave le code suivant :

        Public Function ExtraireValeursNumeriques(chaine As String) As List(Of Long)
            Dim patternNumerique As String = "\d+"
            Dim matches = System.Text.RegularExpressions.Regex.Matches(chaine, patternNumerique)
            Dim valeursNumeriques As List(Of Long) = New List(Of Long)()
            For Each matche As System.Text.RegularExpressions.Match In matches
                valeursNumeriques.Add(Long.Parse(matche.Value))
            Next matche
    
            Return valeursNumeriques
        End Function
    

    Cordialement.

    • Proposé comme réponse Othman Azzouz vendredi 18 novembre 2011 18:25
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 17:38
    Auteur de réponse
  • Bonjour,

    ça dépend de ce que vous voulez faire, un autre exemple peut être "toto2page500", est-ce que vous voulez récupérer la suite ou bien la liste des nombres contenus dans la chaîne?

    Si vous avez besoin de la suite voici une fonction simple, vous allez devoir importer tout d'abord system.char

     

     

    Public Function returnNumbers(ByRef str As String) As Long
    
            Dim i As Integer
            Dim aux As String = ""
    
            For i = 0 To Len(str) - 1
                If IsDigit(str(i)) Then
                    aux += str(i)
                End If
            Next
    
            Return Convert.ToInt64(aux)
    
    End Function


     


    • Modifié Othman Azzouz vendredi 18 novembre 2011 18:21
    • Proposé comme réponse Othman Azzouz vendredi 18 novembre 2011 18:25
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 17:49
  • Bonjour Marcel n°D22

     

    Et bien moi je te propose la méthode classique :

     

    Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load

      Dim texte As String = "Maître 1234 corbeau -3,06" ' chaîne test

      Dim i As Integer

      Dim ascii As Integer

      Dim numerique As String = ""

      For i = 1 To Len(texte)

        ascii = Asc(Mid(texte, i, 1))

        If (ascii > 43 And ascii < 47) Or (ascii > 47 And ascii < 58) Then numerique = numerique & Mid(texte, i, 1)

      Next

      MsgBox("Chaîne de départ : " & texte & vbLf & "Numériques : " & numerique, vbInformation)

      End

    End Sub

     

    Ce qui donne :

    Chaîne de départ : Maître 1234 corbeau -3,06

    Numériques : 1234-3,06

    Cordialement :o)



    Joseph Attila PUSZTAY
    EhJoe       Logiciels       Romans       Ecrire

    • Proposé comme réponse EhJoe vendredi 18 novembre 2011 21:10
    • Modifié EhJoe vendredi 18 novembre 2011 21:10
    • Marqué comme réponse Michel K samedi 19 novembre 2011 23:18
    vendredi 18 novembre 2011 19:22
  • Merci pour vos réponses.

    La première semble être la plus native. De mon côté, je ne connaissais que Val.

    Merci.

     

    samedi 19 novembre 2011 07:57