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 :

Séparer une chaine de caractère VB.net


Sujet :

VB.NET

  1. #1
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 5
    Points
    5
    Par défaut Séparer une chaine de caractère VB.net
    Bonjour à tous,


    J'aimerais pouvoir séparer une chaine de caractère en deux, j'ai essayer la fonction split mais cela ne marche.

    Ma chaine de caratère est par exemple : 12,50
    J'aimerais obtenir dans deux variable string :

    Deb = 12
    Fin = 50

    Ou simplement qu'on me renvoi la position de la "," dans la chaine afin de pouvoir faire ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     d = TB_longBarres."PositionVirgule" 'd est un integer
            d = d - 1
     
            Deb = TB_longBarres.Text.Substring(0, d)
            d = d + 2
            Fin = TB_longBarres.Text.Substring(d)
    Si je pourrais arriver à qqch comme ca mon soucis serais réglé, mais je n'arrive pas à obtenir la position de la virgule.

    J'espere que vous saurez m'aider

    Merci d'avance

  2. #2
    Membre confirmé Avatar de Redouane
    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    435
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2003
    Messages : 435
    Points : 569
    Points
    569
    Par défaut
    Citation Envoyé par frimeman Voir le message
    J'aimerais pouvoir séparer une chaine de caractère en deux, j'ai essayer la fonction split mais cela ne marche.
    Bnj,

    Je ne sais pas porkoi ça marche dans ton cas le split, tu fais comment ? sinon, essaye avec les expressions regulieres, mais ds ton cas, je trouve que le split suffira.

    Bonne courage.

  3. #3
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    La fonction split marche mais disons que dans mon cas ca ne me sert pas, ou je ne sais pas m'en servir lol, c'est possible aussi

    En fait mon but est de vérifier le nombre de caractère avant et apres la ","

    Dans mon programme l'utilisateur ne peut entré que 5 caractère, se qui fait 12,50 (par exemple) mais je ne peux accepter 125,0 ou 1,250.
    Donc il faudrait que je puisse connaitre la position de la "," pour limiter les entrée au format 12,50.

    Je sais pas si je suis trés clair dans mes explications?!

    pour l'instant j'utilise ca :
    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
    18
    19
    20
    21
    22
     
     If DetTab = 0 Then
                If DetTab = 0 And TB_distBarres.TextLength < 5 Then
     
                    d = TB_distBarres.SelectionStart
     
                    Deb = TB_distBarres.Text.Substring(0, d)
                    Fin = TB_distBarres.Text.Substring(TB_distBarres.SelectionStart)
                    TB_distBarres.Text = Deb & "0" & Fin
     
                    TB_distBarres.SelectionStart = d + 1
                    TB_distBarres.Select()
                    Exit Sub
                ElseIf DetTab = 0 And TB_distBarres.Text = "" Then
                    TB_distBarres.SelectionStart = TB_distBarres.TextLength
                    TB_distBarres.Select()
                    Exit Sub
                Else
                    TB_distBarres.Select()
                    Exit Sub
                End If
            End If
    Avec se code, mon programme regarde d'abord si la longueur max n'est pas atteinte, ensuite regarde ou se situe le curseur, Enregistre dans Deb tout se qui se situe avant le curseur et dans Fin se qui se situe apres le curseur. Pour finir par intercalé entre Deb et Fin un "0" en replacant le curseur au bon endroit.

    J'arrive bien a vérifier se qui se situe avant et apres le curseur mais pas se qui se situe avant et apres la ","

    Si tu a d'autre question n'hésite pas

    Merci quand même

  4. #4
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Question bête mais pourquoi 125,0 n'est pas accepter ??

    Il est dans les critères 5 caractères... Si c'est une question de valeur min ou max, alors teste directement la valeur...

  5. #5
    Expert confirmé
    Avatar de Kropernic
    Homme Profil pro
    Analyste / Programmeur / DBA
    Inscrit en
    Juillet 2006
    Messages
    3 932
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Belgique

    Informations professionnelles :
    Activité : Analyste / Programmeur / DBA
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2006
    Messages : 3 932
    Points : 4 242
    Points
    4 242
    Par défaut
    Ou bien utiliser une maskedtextbox ?

  6. #6
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Oui c'est à cause de la valeur min et max et oui je peux le vérifier directement, je cherche aussi de se coté la, c'est possible que je trouve plus facilement de se coté la..

    la valeur min de TB_distBarres est 3 et sa valeur max est 25.
    mais dans tout les cas a la fin il doit etre affiché 25,00

    C'est un peu comme une calculette, quand j'execute, il vérifie les limite min et max et affiche TB_distBarres au format "0,00"

  7. #7
    Membre émérite Avatar de mactwist69
    Homme Profil pro
    Développement VB.NET
    Inscrit en
    Janvier 2007
    Messages
    1 707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développement VB.NET
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 707
    Points : 2 528
    Points
    2 528
    Par défaut
    Et bien ecris toi une procédure qui fais, on va dire 4 a 5 tests qui valide la valeur.

    - En 1 Tu convertie le Textbox.Text en Float,
    -> si a la conversion ça pète, c'est que le format n'est pas valide (2 virgules, un point, un caractère etc...) Donc penser au try catch.

    - Si la conversion est bonne, Tu teste si la valeur min max (rien de plus facile)

    - Si la valeur est dans la tranche valide, pour terminer tu mets dans le Textbox.Text ton float formaté "00,00".

    Ça fait 3 étapes, toutes faciles. L'avantage c'est que tu ne passes pas par des méthodes String compliquées, tu travail directement avec le nombre.

    Sinon l'autre solution propre c'est de travailler avec les expressions régulière (Regex)

  8. #8
    Futur Membre du Club
    Profil pro
    Inscrit en
    Décembre 2010
    Messages
    15
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Décembre 2010
    Messages : 15
    Points : 5
    Points
    5
    Par défaut
    Merci merci..

    je vais continuer vers une de ces possibilité, je posterais mes résultats si je trouve qqch de concluant..

  9. #9
    Membre chevronné
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    1 048
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : Suisse

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2009
    Messages : 1 048
    Points : 2 201
    Points
    2 201
    Par défaut
    Regarde aussi du coté du numérique updow.

  10. #10
    Membre éprouvé
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 673
    Points : 1 173
    Points
    1 173
    Par défaut
    Bonjour,
    on parle plus haut d'expressions régulières.
    Pour moi c'est le plus simple, avec cette fonction d'analyse de l'entrée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Function testDe3A25(ByVal entreeATester As String) As Boolean
     
            Dim pattern As String = "^([3-9]{1}|[1-2]{1}[1-4]{1})(((\.|,)([0-9]{0,2}))?)|([1-2]{1}[1-5]{1})$"
            ' Instantiate the regular expression object.
            Dim rgx As New Regex(pattern)
     
            ' Match the regular expression pattern against a text string.
            Dim m As Match = rgx.Match(entreeATester)
            Return m.Success
     
        End Function
    Ensuite à tester dans le validating du TextBox concerné (ici : text1) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
        Private Sub text1_Validating(ByVal sender As Object, ByVal e As System.ComponentModel.CancelEventArgs) Handles text1.Validating
            If testDe3A25(text1.Text) = False Then
                text1.Text = ""
                MessageBox.Show("ENTREE INVALIDE")
                text1.Focus()
            Else
                '*** Pour la culture française on remplace le point (non accepté) par la virgule,
                '    et on formate avec deux chiffres après la virgule. 
                text1.Text = CDbl(Replace(text1.Text, ".", ",")).ToString("N")
            End If
        End Sub

Discussions similaires

  1. Séparer une chaine de caractères sans split
    Par ndsaerith dans le forum Servlets/JSP
    Réponses: 4
    Dernier message: 24/05/2011, 16h05
  2. [MySQL] Séparer une chaine de caractères dans ma table
    Par keokaz dans le forum PHP & Base de données
    Réponses: 6
    Dernier message: 02/11/2008, 19h39
  3. [BO XI R2] Séparer une chaine de caractère
    Par perrine1985 dans le forum Deski
    Réponses: 2
    Dernier message: 16/04/2008, 10h01
  4. Séparer une chaine de caractère
    Par fabienschmitt dans le forum VB 6 et antérieur
    Réponses: 7
    Dernier message: 08/11/2006, 14h57
  5. Réponses: 15
    Dernier message: 23/01/2006, 04h35

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