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 mots dans une string


Sujet :

VB.NET

  1. #1
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut extraire mots dans une string
    Bonjour,

    j'ai une chaine de caractères avec des mots qui sont séparés par un séparateur (SEP).

    j'ai créer une fonction qui permet d'extraire le premier mot de la chaine mais je n'arrive pas a faire une fonction récursive qui extrait tout les mots de la chaine pour ensuite les afficher dans un texte box ou un tableau

    Voici ma fonction:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    Function extract (ByVal data As String) As String
     
    Dim mot as string
    Dim len as Integer = data.IndexOf(SEP)
     
    If len < 0 then
          len = 0
    end if 
     
    mot = data.Substring(0, len)
    return mot 
    End function

  2. #2
    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
    Tu peux utiliser la fonction split:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Dim MonNouveauMot as String()
    MonNouveauMot=MonAncienMot.Split(SEP)

  3. #3
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    J'ai retapé la fonction mais le problème c'est qu'il ne m'affiche rien

    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
    Function extract (ByVal data As String) As String
     
    Dim mot as string
    Dim moSuivant as String()
    Dim len as Integer = data.IndexOf(SEP)
     
    If len < 0 then
    len = 0
    end if
     
    mot = data.Substring(0, len)
    motSuivant = mot.Split(SEP)
     
    return mot
    End function

  4. #4
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     Dim Mots As String = Split(MaChaine, " ", , CompareMethod.Text)
     Dim QueryMot(10)
     For Each Mot In Mots
         i = i + 1
         QueryMot(i) = Mot
         msgbox QueryMot(i) 
     Next

  5. #5
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    je comprends pas trop ton principe
    Désolé mais je débute

  6. #6
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 310
    Points : 347
    Points
    347
    Par défaut
    Hello ^^

    Je t'explique, c'est une notion légèrement complexe.

    Une chaîne de caractères peut être assimilée à un tableau de chaîne de caractères dans certains cas. Cela permet justement de hacher une grosse chaîne et de récupérer certaines données.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Mots As String = Split(MaChaine, " ", , CompareMethod.Text)
    "Mots" ici représente un tableau de String. Cela a été obtenu en utilisant Split sur "MaChaine". Dans Split, tu as plusieurs paramètres d'appel :

    -Le 1er la chaîne que tu veux traiter
    -Le 2ème le caractère qui permet d'indiquer à quel moment tu passes à un autre string
    -Le 3ème, ici il est vide, je ne sais plus ce que c'est
    -Le 4ème correspond à la méthode que tu souhaites utilisée pour comparer -> ici méthode textuelle

    Donc avec le split, "Mots" contient n String. Pour ce que tu souhaites faire ensuite :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For Each Mot In Mots
         i = i + 1
         QueryMot(i) = Mot
         msgbox QueryMot(i) 
     Next
    Tu parcoures "Mots". Pour chaque mot contenu, tu incrémentes i (qui te sers d'index dans le tableau QueryMot), tu l'insères dans QueryMot à l'index i, et enfin tu affiches à l'aide d'un messageBox le contenu de la case où tu viens d'insérer la donnée. Voilou, j'espère que c'est un peu plus claire ^^

  7. #7
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    A vrai dire? ...

    Je t'explique le contexte.J'ai un socket client.Lorsque celui ci fait une demande de données (par exemple des paramètres) il envoi un message au socket serveur qui lui traite la demande.
    Lorsqu'il reçoit la demande celui ci lui envoi la chaine de caractère (dont les mot à l'intérieur sont séparés par SEP (un séparateur)) qui est contenu dans "paramètre".

    C'est ensuite au client de traiter la chaîne brut et de traiter les données reçues pour les afficher ensuite sous forme de tableau dans ma fenêtre...

    si je fais ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    sub MiseEnForme( byval chaine as string)
     
        Dim Tab() as string
     
        Tab = chaine.Split(SEP)
     
    end sub

  8. #8
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    merci à Sebnantes pour la traduction en français
    Je n'aurais pas fait mieux

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Août 2008
    Messages
    310
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 310
    Points : 347
    Points
    347
    Par défaut
    Essaie plutôt ce type de code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim Tab as String = Split(chaine,SEP, , CompareMethod.Text)
    Dans Tab, tu auras les différents string qui compose ton message. Ensuite, si tu peux afficher les éléments contenus dans Tab, tu peux faire ce qui suit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    For each Element in Tab
    MsgBox(Element)
    Next
    Il t'affichera chaque String contenu dans Tab. Et qu'est ce que tu n'as pas compris dans ce que je t'ai expliqué ?

  10. #10
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    Oui et je t'en remerci .
    Seulement lorsque je tape mon code il y a une erreur au niveau du split de commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Sub MiseEnForme(byval data as string)
     
    Dim Tab as String = Split (data,SEP,,CompareMethod.text)
     
    for each Element in Tab
         TextBox1.text += Element
    next

  11. #11
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    C'est bon j'ai trouvé l'erreur.Mais c'est toujours pareil je n'arrive pas a afficher les autre mot.Il ne récupère que le premier mot

  12. #12
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Celui ci fonctionne

    Citation Envoyé par thierry007 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    Sub MiseEnForme(byval data as string)
     Dim Mots As String = Split(data, " ", , CompareMethod.Text)
     Dim QueryMot(10)
     For Each Mot In Mots
         i = i + 1
         QueryMot(i) = Mot
         msgbox QueryMot(i) 
     Next

  13. #13
    Membre du Club
    Inscrit en
    Avril 2010
    Messages
    219
    Détails du profil
    Informations forums :
    Inscription : Avril 2010
    Messages : 219
    Points : 69
    Points
    69
    Par défaut
    lol j'obtient exactement le mm résultat.
    Je crois savoir d'où vient le problème.J'ai une fonction recevoir qui sert a récupéré les données envoyé par le serveur

    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
    23
    24
    25
    26
    27
    28
    29
    30
    Function recevoir() As String
     
            Dim returnData As String = Nothing
            Dim inStream(10024) As Byte
            Dim serverStream As NetworkStream
     
            If clientSocket.Connected Then
     
                Try
                    serverStream = clientSocket.GetStream()
     
                    'Lecture des données dans le flux
                serverStream.Read(inStream,0,CInt(clientSocket.ReceiveBufferSize))
                    returnData = System.Text.Encoding.ASCII.GetString(inStream)
     
                    Dim len As Integer = returnData.IndexOf("$")
     
                    If len < 0 Then
                        len = 0
                    End If
     
                    returnData = returnData.Substring(0, len)
                Catch ex As Exception
                    msg(Donnees.ERR_REC)
                End Try
            End If
     
            Return returnData
     
        End Function
    Je ne devrais pas la modifier?

  14. #14
    Membre confirmé Avatar de thierry007
    Homme Profil pro
    Autodidacte
    Inscrit en
    Août 2006
    Messages
    876
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Autodidacte
    Secteur : Industrie

    Informations forums :
    Inscription : Août 2006
    Messages : 876
    Points : 457
    Points
    457
    Par défaut
    Evite d'utiliser 'data'

Discussions similaires

  1. Compter occurrence de chaque mot dans une String
    Par OrangeAmps dans le forum Débuter avec Java
    Réponses: 2
    Dernier message: 02/05/2014, 21h49
  2. Réponses: 3
    Dernier message: 30/08/2010, 12h22
  3. [RegEx] Extraire un entier ou un mot dans une chaine
    Par liverbird dans le forum Langage
    Réponses: 7
    Dernier message: 02/08/2007, 12h01
  4. Réponses: 4
    Dernier message: 11/05/2006, 14h41
  5. [DEBUTANT]Recherche mot contenu dans une String
    Par lynxman dans le forum Langage
    Réponses: 7
    Dernier message: 16/12/2005, 11h49

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