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 :

Extraire partie numérique et alphanumérique d'une chaine en VB.NET


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut Extraire partie numérique et alphanumérique d'une chaine en VB.NET
    Bonjour,
    Je voudrais séparer entre la partie numérique et la partie alphanumérique d'une chaine de caractère:
    Par Ex: MaChaine="Ma_société658148"
    je voudrais passer Ma_société dans une variable et 658148 dans une autre.
    Merci de m'aider.

  2. #2
    Membre émérite
    Avatar de Gurdil le nain
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Avril 2009
    Messages
    468
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

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

    Informations forums :
    Inscription : Avril 2009
    Messages : 468
    Par défaut
    Il va falloir faire un traitement de ta chaine caractère par caractère je pense...ou utiliser des regex.

  3. #3
    Membre éclairé Avatar de sihammaster
    Webmaster
    Inscrit en
    Mai 2009
    Messages
    256
    Détails du profil
    Informations professionnelles :
    Activité : Webmaster
    Secteur : Finance

    Informations forums :
    Inscription : Mai 2009
    Messages : 256
    Par défaut
    Merci pour la réponse,
    Je crois que le Regex est utilisable lorsque on aura un séparateur.. mais la j'en ais pas.

  4. #4
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Salut, Regex est fait pour toi, non pas besoin de véritable séparateur : "(?<alpha>[a-zA-Z_]+)(?<num>[\d]+)"
    En voila une toute simple que tu peux adapter au besoin.
    Edit : Un petit lien pour plus d'infos : http://msdn.microsoft.com/en-us/library/az24scfc.aspx

    J'ai aussi corrigé ma regex parce qu'il me semblait de mémoire que \w c'était les lettres uniquement, mais non, c'est lettre + chiffres. Et de toute façon c'était faux car ton exemple contient un underscore à matcher aussi.

  5. #5
    Membre Expert
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    700
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 700
    Par défaut
    Citation Envoyé par ctxnop Voir le message
    Salut, Regex est fait pour toi, non pas besoin de véritable séparateur : "(?<alpha>[a-zA-Z_]+)(?<num>[\d]+)"
    En voila une toute simple que tu peux adapter au besoin.
    Bonjour,
    juste une petite adaptation pour les caractères accentués (empruntée à stormimon) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    "(?<alpha>[\w-[0-9]]+)(?<num>[\d]+)"

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    355
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 355
    Par défaut
    Bonjour

    Je suis débutant en VB.NET mais vétérant en VB6, et j'ai une solution (en VB.NET), si cela t'intéresse.
    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
     
            Dim MaChaine As String = "Ma_société658148"
            Dim Car As String
            Dim Lettres As String = ""
            Dim Chiffre As String = ""
            Dim I As Integer
            For I = 1 To MaChaine.Length
                Car = Mid(MaChaine, I, 1)
                If IsNumeric(Car) Then
                    Chiffre += Car
                Else
                    Lettres += Car
                End If
            Next
            MsgBox(Lettres & vbCrLf & Chiffre)

  7. #7
    Membre émérite Avatar de ctxnop
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2007
    Messages
    858
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Morbihan (Bretagne)

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

    Informations forums :
    Inscription : Juillet 2007
    Messages : 858
    Par défaut
    Citation Envoyé par Claude_Azoulai Voir le message
    Bonjour

    Je suis débutant en VB.NET mais vétérant en VB6, et j'ai une solution (en VB.NET), si cela t'intéresse.
    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
     
            Dim MaChaine As String = "Ma_société658148"
            Dim Car As String
            Dim Lettres As String = ""
            Dim Chiffre As String = ""
            Dim I As Integer
            For I = 1 To MaChaine.Length
                Car = Mid(MaChaine, I, 1)
                If IsNumeric(Car) Then
                    Chiffre += Car
                Else
                    Lettres += Car
                End If
            Next
            MsgBox(Lettres & vbCrLf & Chiffre)
    Solution quelque peu lourde alors qu'une regex telle que je l'ai donnée fait le boulot en une ligne.
    On voit que tu viens du VB6... Les tableaux ça débute à 0, pas à 1, et il y a un indexeur sur la chaine, ce qui rend le mid() inutile.
    Comme il y a aussi un enumérateur, il est aussi simple de faire un foreach plutot.
    Mais dans tous les cas, le code est faux, si la chaine est "abc123def", tu obtiendra Lettres = "abcdef", or tu aurais du avoir "abc".

Discussions similaires

  1. [WD12] Extraire partie numérique d'une chaine
    Par zouzoukha dans le forum WinDev
    Réponses: 4
    Dernier message: 27/07/2010, 16h45
  2. [Toutes versions] Extraire partie numérique d'une chaine
    Par tAKAmAkA dans le forum VBA Access
    Réponses: 2
    Dernier message: 15/11/2009, 22h15
  3. Extraire des 4 dernier caractères d'une chaine
    Par Niko_de_bordo dans le forum Débuter
    Réponses: 9
    Dernier message: 19/06/2009, 17h49
  4. Réponses: 0
    Dernier message: 27/12/2008, 23h49
  5. Extraire les n premiers termes d'une chaine
    Par knecmotet dans le forum C++
    Réponses: 4
    Dernier message: 03/03/2005, 15h05

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