Vb2010 : help Separer les chaines de caractere et les mettre dans un tableau

sculptured - 23 mai 2013 à 14:30
 Utilisateur anonyme - 28 mai 2013 à 13:23
bonjour a tous. voila je suis bloqué je dois placer mes mots d'une boite de texte dans un tableau. voici le code que j'ai fais mais je suis un peu perdu car il ne fonctionne pas... si quelqu'un peut m'aider. ( et je precise que c'est pour l'ecole et que je ne peux pas utiliser des fonctions plus facile comme split,...) merci







Public Class Form1

Private Sub BUT_ENTRER_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUT_ENTRER.Click


Dim str_tableau_de_mot() As String

Dim int_i As Integer

Dim str_phrase_entrer As String

Dim int_mot_seul As Integer


str_phrase_entrer = TXT_PHRASE_ENTREE.Text


For int_i = 1 To Len(str_phrase_entrer)

If (Mid(str_phrase_entrer, int_i, 1) = " ") Then

ReDim Preserve str_tableau_de_mot(int_mot_seul)

str_tableau_de_mot(int_mot_seul) = Mid(str_phrase_entrer, int_i, 1)

int_mot_seul = int_mot_seul + 1

End If



Next int_i


For int_i = 0 To int_mot_seul - 1

LST_INDICES_MOTS_DANS_LE_TABLEA.Items.Add(str_tableau_de_mot(int_i))

Next




End Sub


End Class

29 réponses

Bonjour sculptured.

Votre code est difficilement lisible, parce qu'il n'est pas indenté, qu'il n'est pas syntaxiquement coloré, et que vous employez des notations longues d'ici jusqu'à Pontoise.
D'autre part, qu'entendez-vous par "mon code ne fonctionne pas" ? Il ne se passe rien ? Vous avez un message d'erreur ? Si oui, que dit-il et où se produit-il ?
Encore une chose. Les fonctions comme Len ou Mid, héritées de Vb6, sont obsolètes en vb.net. Consultez la classe String pour trouver leurs équivalents (parfois approximatif).

Cordialement.

Étant illettré, je signe d'une croix : ×
0
Utilisateur anonyme
23 mai 2013 à 18:56
Bonjour,

Zermelo,
notations longues d'ici jusqu'à Pontoise

Oui en partant de chez moi oui ça fait une "trotte"...

sculptured:
Tout à fait d'accord avec Zermelo, ton code exposé est illisible, tes idées "embrouillés" et on utilise pas du VB6 en VB.NET.

Ton prof à mon avis, s'il t'a interdit le Split, c'est qu'il voulait te faire travailler les neurones afin de te noter pour ton travail fini.

Si, (par exemple) moi, je te fait le code la note de ton prof me sera attribuée (à moi et non à toi).

Réfléchis deux secondes, quel est le caractère de séparation des mots commun dans toutes les phrases?
Commence par déterminer la position du tout premier dans la phrase.


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
24 mai 2013 à 03:06
Re:

sculptured: j'ai "fabriqué" une fonction (sans le Split) qui fait exactement la même chose, et uniquement en VB.Net, tu es intéressé?
On s'en sert comme ça:
Exemple:
 Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Dim Texte As String = "Bonjour  je suis en                  train de galérer"
        ListBox1.Items.AddRange(DécoupeSansSplit(Texte, " ").ToArray)
    End Sub

Il affiche ça dans la listbox: (sans espaces ou autres séparateurs)

Bonjour
je
suis
en
train
de
galérer

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
merci a tous, dsl mais je ne sais pas vraiment comment je dois proceder dans les forums. le probleme c'est que je dois utiliser des ligne de codes avec des len et mid...
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
24 mai 2013 à 13:31
Bonjour,

Alors tu renseigneras tes profs que dans VB2010 les méthodes Len(xx) et Mid(..." sont obsolètes.

Dans un projet VB.net il importe automatiquement les références de vb6, dans les propriétés du projet il faut décocher 'microsoft visual basic' (onglet références)

Si tu veux rester avec les Len() et Mid() ce sera en VB6, sinon il y a ma solution en vb.net

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
24 mai 2013 à 14:40
Salut
vb6 vb.net
Len = .Length
Mid = .SubString
Replace = .Replace
InStr = .IndexOf
UCase = .ToUpper
LCase = .ToLower
Split = .Split
Join = .Join

en vb6 ceux sont des fonctions
en vb.net ce sont des méthodes appartenant à la
class string
ex
en net textbox1.text.length
textbox1.text.indexof(" ")

acive toi ???
Bonjour je suis en train de galérer
0
Utilisateur anonyme
24 mai 2013 à 14:42
OK, je commence (en mode obsolète) donc:

'Tu mets un Listbox nommé 'ListBox1' et un Bouton nommé 'Button1' dans ta Form
    Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click

        Dim MaPhrase As String = ""
        Dim Mot As String = ""
        Dim i As Integer

        MaPhrase = "ceci est ma phrase à découper"
        For i = 1 To Len(MaPhrase)
           'Bla bla bla
        Next
        ListBox1.Items.Add(Mot)
    End Sub


Que signifie "Len(MaPhrase)" ?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
24 mai 2013 à 14:47
Salut ShayM;
acive toi ???
Bonjour je suis en train de galérer



Hé oui... je galère à lui faire se bouger un peu !!!

J'ai l’impression que je suis le seul à me préoccuper de son problème...


Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Bonjour sculptured.

Pouvez-vous nous donner la liste exhaustive des fonctions obsolètes que votre prof vous oblige à employer ?


Étant illettré, je signe d'une croix : ×
0
Utilisateur anonyme
24 mai 2013 à 16:40
Bonjour Zermelo,

Il a dit:
le probleme c'est que je dois utiliser des ligne de codes avec des len et mid


Apparemment il doit les utiliser (sans les remplacer), d'après ce que j'ai compris...

Et rien que ces deux-la (Mid et len) ça suffit pour faire son application.

A propos j'ai inversé "Button1" et "Button2" dans mon code...

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Public Class Form1

    Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUT_EXECUTER.Click

        'JE DECLARE MES VARIABLES'

        Dim STR_PHRASE As String 'Elle va contenir la phrase qui est dans la textbox

        Dim STR_MOTS As String ' Elle va contenir un mot de la phrase de la textbox

        Dim INT_I As Integer 'c'est la variable de boucle incondtionnel

        Dim STR_TABLEAU_DANS_L_ORDRE() As String ' On déclare un tableau dynamique qui va contenir les mots de la phrase dans l'ordre

        Dim INT_TABLEAU_ALEATOIRE() As Integer ' On déclare un tableau dynamique qui va contenir les mots dans le désordre

        Dim INT_COMPTEUR_MOTS As Integer ' On déclare une variable compteur qui va inserer les mots dans le tableau

        Dim int_j, int_k As Integer

        Dim str_aleatorie As String
        '------------------------------------------------------------------------------------------------------------------------

        STR_PHRASE = TXT_PHRASE_ENTRER.Text ' Nous disons que la boite de texte qui contient une phrase va etre stocker dans une variable
        STR_PHRASE = STR_PHRASE + " " 'La phrase qui a etait stocker va se terminer par un espace

        '------------------------------------------------------------------------------------------------------------------------


        For INT_I = 1 To Len(STR_PHRASE) ' La boucle va lire le premier caractére de la phrase jusqu'au dernier

            If (Mid(STR_PHRASE, INT_I, 1) <> " ") Then ' Si les caractéres lu sont différentes d'un espace alors

                STR_MOTS = STR_MOTS + Mid(STR_PHRASE, INT_I, 1) ' On stocke les caractéres dans une variable

            Else
                INT_COMPTEUR_MOTS = INT_COMPTEUR_MOTS + 1 ' On incrémente le compteur de 1

                ReDim Preserve STR_TABLEAU_DANS_L_ORDRE(INT_COMPTEUR_MOTS) 'On indique au tableau qu'on ajoute un nouvel élément

                STR_TABLEAU_DANS_L_ORDRE(INT_COMPTEUR_MOTS) = STR_MOTS 'On insére le mot stocker dans la variable dans le tableau



                STR_MOTS = ""

            End If

        Next INT_I
        '------------------------------------------------------------------------------------------------------------------------


        For INT_I = 1 To INT_COMPTEUR_MOTS 'ON LIT CE QUI EST CONTENUR DANS INT_COMPTEUR



            LST_TABLEAU_DANS_L_ORDRE.Items.Add(STR_TABLEAU_DANS_L_ORDRE(INT_I)) ' On affiche les éléments du tableau dans une listbox


        Next

       





    End Sub
End Class



voila ce que j'ai su faire, je comprends bien qu'il existe des fonctions plus simple mais bon, l'ecole...

ce que je n'arrive pas a trouver c'est comment mettre tout ceci de facon aleatoire dans une autre listbox.

je sais que je dois utiliser la methode randomize et rnd mais le reste... merci pour vos reponse au passage
0
ps : pour mes variables on m'oblige a utiliser la methode finlandaise pour préfixer mes variables

exemple dim STR_PHRASE as string = str pour string comme INT pour integer.
0
Utilisateur anonyme
26 mai 2013 à 22:09
Et si tu fais:
   Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
        Dim Str As String = "Tu n'auras pas ce texte dans l'ordre de saisie"
        Dim Aléatoire As Integer = 0
        Dim Tableau() As String = Split(Str)
        Dim ListTemp As New ListBox
        For i As Integer = 0 To UBound(Tableau)
            ListTemp.Items.Add(Tableau(i))
        Next
        Do While ListTemp.Items.Count > 0
            Randomize()
            Aléatoire = CInt(Int(ListTemp.Items.Count - 1 * Rnd()))
            ListBox1.Items.Add(ListTemp.Items(Aléatoire))
            ListTemp.Items.RemoveAt(Aléatoire)
        Loop
        ListBox1.Items.Add(Str)
        ListTemp = Nothing
    End Sub


Que comprends-tu?

Cordialement


CF2i - Guadeloupe
Ingénierie Informatique
0
Utilisateur anonyme
26 mai 2013 à 22:18
Bonjour,

ps : pour mes variables on m'oblige a utiliser la methode finlandaise pour préfixer mes variables

exemple dim STR_PHRASE as string = str pour string comme INT pour integer.


Quoi ? Pour le con de professeur, as string ce n'est pas assez ?
0
Mais voila je problème je ne peux pas ;(. utiliser ubound, split, listtemp et toute ces fonctions je dois faire comme a l'age de pierre....

je te donne un exemple avec un exerices pour faire apparaitre des nombre comme le lotto

Public Class Form1

    Private Sub BUT_LOTTO_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles BUT_LOTTO.Click

        'IL FAUT REINITIALISER LE TIMER POUR AVOIR DES NOMBRES ALEATOIRE

        Randomize()

        'ON DECLARE UN TABLEAU POUR METTRE LES N° DU LOTTO

        Dim INT_LOTTO(6) As Integer

        'CES VARIABLES SERT POUR LES TIRAGES

        Dim INT_I, INT_J As Integer

        INT_LOTTO(1) = (Rnd() * 42) + 1  ' PLUS UN CAR POUR EVITER QU'IL NE TIRE LE 0

        'LA BOUCLE COMMENCE A DEUX CAR ON A DEJA LE PREMIER TIRAGE

        For INT_I = 2 To 6 Step +1 ' JE CREE UNE BOULE QUI VA ECRIRE LES 5 NUMEROS SUIVANT DANS MON TABLEAU

            'JE FAIS UN PREMIER TIRAGE D'UN NOMBRE COMPRIS ENTRE 1 ET 42 ET CE PREMIER NOMBRE VA ALLER DANS LA PREMIERE CASE DU TABLEAU



            INT_LOTTO(INT_I) = (Rnd() * 42) + 1  ' JE RETIRE UN NOMBRE COMPRIS ENTRE 1 ET 42 DANS LA CASE INT_I DE MON TABLEAU


            For INT_J = INT_I - 1 To 1 Step -1 ' JE VERIFIE SI LE NOMBRE  TIRE N'A PAS DEJA ETAIT TIRE PRECEDEMENT, POUR CE FAIRE JE CREE UNE
                ' INVERSE QUI ME PERMET DE TESTER LES NOMBRES PRECEDENT.SI IL Y A EGALITEE DANS LES NOMBRES TIRES, L'ASTUCE EST DE DECREMENTER INT_I POUR QU4IL RETIRE UN NOUVEAU MONBRE DANS LA MEME CASE

                If INT_LOTTO(INT_I) = INT_LOTTO(INT_J) Then

                    INT_I = INT_I - 1

                    Exit For ' POUR SORTIR DE LA BOUCLE POUR NE PAS REVERIFIER CE QUI A ETAIT VERIFIER
                End If

            Next
        Next


je sais je suis un peu chiant mais bon, je dois realiser cela pour la fin de l'année et j'ai des difficultés avec des fonctions qui sont depassées depuis longtemps.
0
Utilisateur anonyme
26 mai 2013 à 22:25
À bien y penser, il te manque une ligne:

Dim CON_PROFESSEUR as Con


ou bien

Dim MATHUSALEM_PROFESSEUR as Mathusalem
0
cs_ShayW Messages postés 3253 Date d'inscription jeudi 26 novembre 2009 Statut Membre Dernière intervention 3 décembre 2019 57
26 mai 2013 à 22:29
Salut Sculptured

justement comme tu es nouveau en vb.net
il vaut mieux prendre des bonnes habitudes
et ne pas utiliser les fonctions de vb6
comme mid et len
mais leurs équivalents en vb.net
la premiere chose que le prof a du vous dire
1 à activer Option Explicit et Option Strict (propriété du projet)
2 et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).
0
Utilisateur anonyme
26 mai 2013 à 22:32
Bonjour,

En passant, tu devrais demander à Mathusalem ce qu'il aurait fait avec sa connerie islandaise quand les variables du BASIC étaient limitées à deux caractères et que 16 K (SIC) de mémoire vive était presque un luxe et qu'un disque dur de 5 megs (encore SIC) coûtait plus de 5000 dollars.
0
Utilisateur anonyme
26 mai 2013 à 22:52
Bonjour ShayW,

justement comme tu es nouveau en vb.net
il vaut mieux prendre des bonnes habitudes
et ne pas utiliser les fonctions de vb6
comme mid et len
mais leurs équivalents en vb.net


Tout à fait d'accord

la premiere chose que le prof a du vous dire
1 à activer Option Explicit et Option Strict (propriété du projet)
2 et à retirer l'import automatique de l'espace de nom Microsoft.VisualBasic (onglet Références dans les propriétés du projet).


Là, je ne suis vraiment pas sûr qu'il l'ait fait. Même que la seule chose qu'il doit savoir de VB.net c'est qu'il supporte les anciennes fonctions de VB. Et puis, quand je regarde dans l'aide de VB 2012 Express, j'ai l'impression que ce support n'est en fait qu'un alias ou une sorte de wrapper pour les classes réelles du Framework; un peu comme My.Computer et My.User.

Mais c'est bien dommage d'obliger les étudiants à agir en dinosaures et lier l'apprentissage de la programmation à l'utilisation de fossiles.
0
je pense plutot, que c'est pour nous faire comprendre comment fonctionne les choses en faite, mais bon...
0
Rejoignez-nous