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 :

Supprimer des Nombre d'un string ?


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut Supprimer des Nombre d'un string ?
    Bonjour,

    Je développe une petite application dans laquelle ont doit y lire des noms. Pour éviter des problemes, lorsqu'il y a deux nom pareilles, nom lui ajouteon un chiffre a la fin.

    Ex: Paul morrin , Paul morrin 2.

    Maintenant, pour lire les noms, il's doivent tous être pareille dans le combo box.

    Je voudrai savoir , s'il y a une façon de trouver s'il aun chiffre de 1 a 99 (par exemple) dans le string et par la suite , le supprimer (ainsi que l'espace).

    Merci de votre futur aide

  2. #2
    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
    Je vois bien deux ou trois façons de faire ca, tout dépend de comment tu remplis tes listes.
    Par exemple, si tu bind tes listes à un IList<Person> où Person est une classe contenant un membre Name (où tu stock "Paul morrin", "Paul morrin 2").

    Tu as deux solutions : créer une nouvelle propriétés qui retourne uniquement le nom (sans le nombre) et renseigner la propriété DisplayMember de tes listes.

    Tu peux également surcharger la méthode ToString() pour qu'elle te retourne ce nom sans nombre.

    Tu peux également revoir ton système de données pour qu'il accepte des noms en doublons (il gèrera un nombre unique associé a chaque nom mais dans un membre différent).

    Sinon, pour extraire le nom sans le numéro final, une expression rationnelle fera parfaitement l'affaire : ^(?<name>[a-zA-Z ]+)([\s]*[0-9]+)?$
    A adapter selon tes besoin (le résultat pourra sera peut être plus simple).

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Bon,
    pour rendre le tout plus simple, tout ce que je veux savoir est

    comment faire pour supprimer le nombre qui se situe a la fin, mais qui dans le moment est géré en string dont : "paul morrin 2"

    j'avais pensé a une méthode avec
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if string.contains("2") then
    ...
     
    end if
    sauf que sa ne fonctionne pas. Je voudrai juste simplement, que "Paul morrin 2" passe a "Paul morrin"

    Merci de ton aide

  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
    J'ai également répondu à cette question via l'expression rationnelle.

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Et comment peut-on faire cette expression rationnel avec: ^(?<name>[a-zA-Z ]+)([\s]*[0-9]+)?$ , Bien que tout ce que j'ai besoin est : [0-9]

  6. #6
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bonsoir,

    Voici un exemple simple et fonctionnel (Framework 3.5 mini) qui semble convenir au problème (avec une méthode d'extension) même si personnellement j'emploierais plutôt une méthode basée sur une propriété supplémentaire d'une classe comme suggérée plus haut.

    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
     
    Module Module1
     
        Sub Main()
            Dim myChaine As String = "Paul Morrin 2"
     
            Console.WriteLine(myChaine.ToStringWithoutTrailingNumber)
            Console.ReadKey(True)
        End Sub
     
        <Runtime.CompilerServices.Extension()>
        Function ToStringWithoutTrailingNumber(ByVal source As String) As String
            Dim temp As New String(source.TakeWhile(Function(c) Not Char.IsDigit(c)).ToArray)
            Return temp.Trim 'To remove possible space between name and number
        End Function
     
    End Module
    Cordialement !

  7. #7
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Hmm, il y a une erreur dans ton code. a la ligne ou l'on déclare que l'on va utiliser une méthode extendu, dont :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <Runtime.CompilerServices.Extension()>
    Vb me dit:
    Attribute specifier is not a complete statement. Use a line continuation to apply the attribute to the following statement.
    sincèrement, j'ai jamais utilisé les <Runtime> puisque je ne suis pas encore assez expérimenté, alors je ne peut t'aider

    Si tu connait ton erreur, j'aimerai bien que tu me donne la réponse

    Merci beaucoup encore

  8. #8
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Cela vient du fait que dans Visual Studio 2010 on est plus obligé de mettre les "symboles continuateurs de ligne" (beurk c'est moche cette expression )

    donc solution n°1: ben tu le rajoutes
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    <Runtime.CompilerServices.Extension()> _
    (Note qu'il y a un espace entre la fermeture de balise et l'underscore)
    solution n°2: tu le mets sur la même ligne que la fonction (donc plus besoin de "continuateur de ligne")
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <Runtime.CompilerServices.Extension()> Function ToStringWithoutTrailingNumber(ByVal source As String) As String
        '...
    solution n°3: tu le supprimes carrément (dans ce cas là ce ne sera plus une méthode d'extension et il te faudra modifier l'appel de fonction comme ceci)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Console.WriteLine(ToStringWithoutTrailingNumber(myChaine))
    Cordialement !

  9. #9
    Membre confirmé
    Profil pro
    Inscrit en
    Août 2009
    Messages
    125
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2009
    Messages : 125
    Par défaut
    Wow. Sa fonctionne juste avec un " _ " a rajouter !

    J'admire tes connaissances.


    Par contre, j'ai toujours une question. Avec le code que tu ma donné, je voudrai faire quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    if lenom.contains(unchiffre) then
     
    ton code
     
    end if
    comment je peut faire pour savoir s'il a un chiffre dans le texte ?


    Merci beaucoup . Que puisje faire en retour ?

    Icekev

  10. #10
    Membre Expert
    Avatar de Sehnsucht
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2008
    Messages
    847
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Lot et Garonne (Aquitaine)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Octobre 2008
    Messages : 847
    Par défaut
    Bah mes connaissances, c'est beaucoup de lecture de MSDN, et parfois aussi beaucoup d'essais/erreurs plus de la chance

    Je ne suis pas sûr de comprendre l'intérêt de ta question, juste pour préciser, si jamais tu passe à ma fonction un nom "normal" (ie. sans nombre à la fin) elle te renverra simplement la même chaîne.

    Sinon tu peux toujours essayer ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Dim myChaine As String = "Paul Morrin 2"
     
    Dim containsDigit As Boolean = myChaine.Any(Function(c) Char.IsDigit(c))
    Bon faudrait tester que la chaine ne vaut pas Nothing pour bien faire mais c'est un exemple

    Cordialement !

  11. #11
    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
    Bonjour,
    dans la continuation de ctxnop, un exemple de regex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
            Dim lenom As String = "Paul Morrin 15"
            '***Modèle à appliquer, soit nombre de 0 à 9, un ou plusieurs
            Dim patt As String = "[0-9]+"
            '***Recherche dans la chaine spécifiée si le modèle existe.
            Dim match As System.Text.RegularExpressions.Match = System.Text.RegularExpressions.Regex.Match(lenom, patt)
     
            If match.Success Then
                MessageBox.Show(System.Text.RegularExpressions.Regex.Replace(lenom, patt, ""))
            Else
                MessageBox.Show(lenom)
            End If

  12. #12
    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
    J'aurais voulu éviter de lui donner un code vu que de toute évidence il ne fait absolument aucune recherche vis a vis des réponses apportées.
    Une recherche "expression rationnelle .Net" lui aurait immédiatement donner un code pour utiliser l'expression rationnelle que je lui ai donnée.
    Expression qui permet d'extraire le nom en excluant l'éventuel numéro final (donc mon expression tolère un numéro en plein milieu du nom et s'applique que le nom contienne ou non un numéro final).

  13. #13
    Membre émérite Avatar de methylene
    Profil pro
    Inscrit en
    Février 2010
    Messages
    659
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Février 2010
    Messages : 659
    Par défaut
    Sinon un simple Instr sur la chaîne en question en recherchant le chiffre 2.

    Moi aussi je ne donnerais aucun code, il suffit de chercher un peu sur google les chaînes de caractères.

  14. #14
    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
    ok, reçu 5/5
    ctxnop
    donc mon expression tolère un numéro en plein milieu du nom
    Je ne sais pas si je m'y prends bien, je passe par "match.Groups.Item" pour extraire le nom, mais si je teste "Paul 2 Morrin2", le match ne capture rien.

  15. #15
    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
    En fin de compte, il faut se concentrer sur la question posée, à savoir supprimer en fin de chaine tout espace blanc et chiffre.
    Alors la regex peut être : "[ \d]*$"
    Et on fait un "replace" par rien.

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

Discussions similaires

  1. extraire des nombres d'une string
    Par neonico dans le forum C#
    Réponses: 9
    Dernier message: 06/03/2014, 09h58
  2. [Résolu] Supprimer des '\n' d'un string
    Par TheSunser dans le forum Général Python
    Réponses: 10
    Dernier message: 15/12/2013, 19h17
  3. [VBA] supprimer des nombres en partant de la gauche
    Par ickyknox dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 18/03/2008, 16h41
  4. Réponses: 2
    Dernier message: 26/06/2007, 16h04
  5. Comment supprimer des fichiers en nombre ?
    Par Didier L dans le forum API, COM et SDKs
    Réponses: 13
    Dernier message: 25/01/2005, 16h01

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