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 :

Probleme avec un tableau string


Sujet :

VB.NET

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut Probleme avec un tableau string
    Bonjour à tous,

    Voila, j'ai un souci pour parcourir un tableau de string pour comparer ses valeurs avec d'autre afin que lorsque je trouve une valeur qui correspond à ce que je compare, je puisse afficher une valeur de mon tableau dans un datagridview

    voici mon code, qui pour moi me parait bon:
    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
    31
    32
    33
    34
    Dim Vitesse(6, 1) As String
     
            Vitesse(0, 0) = "00"
            Vitesse(0, 1) = "1200 bit/s"
            Vitesse(1, 0) = "01"
            Vitesse(1, 1) = "2400 bit/s"
            Vitesse(2, 0) = "02"
            Vitesse(2, 1) = "4800 bit/s"
            Vitesse(3, 0) = "03"
            Vitesse(3, 1) = "9600 bit/s"
            Vitesse(4, 0) = "04"
            Vitesse(4, 1) = "19200 bit/s"
            Vitesse(5, 0) = "05"
            Vitesse(5, 1) = "38400 bit/s"
            Vitesse(6, 0) = "06"
            Vitesse(6, 1) = "57600 bit/s"
     
    		                        'Traitement sur les vitesses voie 1
                            If Vitesse(0, 0) = Hexa_Temp.EndsWith("00") Then Row(Idx_Row, 6) = Vitesse(0, 1)
                            If Vitesse(1, 0) = Hexa_Temp.EndsWith("01") Then Row(Idx_Row, 6) = Vitesse(1, 1)
                            If Vitesse(2, 0) = Hexa_Temp.EndsWith("02") Then Row(Idx_Row, 6) = Vitesse(2, 1)
                            If Vitesse(3, 0) = Hexa_Temp.EndsWith("03") Then Row(Idx_Row, 6) = Vitesse(3, 1)
                            If Vitesse(4, 0) = Hexa_Temp.EndsWith("04") Then Row(Idx_Row, 6) = Vitesse(4, 1)
                            If Vitesse(5, 0) = Hexa_Temp.EndsWith("05") Then Row(Idx_Row, 6) = Vitesse(5, 1)
                            If Vitesse(6, 0) = Hexa_Temp.EndsWith("06") Then Row(Idx_Row, 6) = Vitesse(6, 1)
     
                            'Traitement sur les vitesses voie 0
                            If Vitesse(0, 0) = Hexa_Temp2.EndsWith("00") Then Row(Idx_Row + 1, 6) = Vitesse(0, 1)
                            If Vitesse(1, 0) = Hexa_Temp2.EndsWith("01") Then Row(Idx_Row + 1, 6) = Vitesse(1, 1)
                            If Vitesse(2, 0) = Hexa_Temp2.EndsWith("02") Then Row(Idx_Row + 1, 6) = Vitesse(2, 1)
                            If Vitesse(3, 0) = Hexa_Temp2.EndsWith("03") Then Row(Idx_Row + 1, 6) = Vitesse(3, 1)
                            If Vitesse(4, 0) = Hexa_Temp2.EndsWith("04") Then Row(Idx_Row + 1, 6) = Vitesse(4, 1)
                            If Vitesse(5, 0) = Hexa_Temp2.EndsWith("05") Then Row(Idx_Row + 1, 6) = Vitesse(5, 1)
                            If Vitesse(6, 0) = Hexa_Temp2.EndsWith("06") Then Row(Idx_Row + 1, 6) = Vitesse(6, 1)
    Or, cela ne me renvoi pas toujours les bonnes valeurs. je m'explique:
    soit Hexa_Temp = "0xb01"

    pour Hexa_Temp, je devrai rentrer seulement dans mon
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    If Vitesse(1, 0) = Hexa_Temp.EndsWith("01") Then Row(Idx_Row, 6) = Vitesse(1, 1)
    , et pas dans les autres. or je rentre quand même dans mon premier 'if'...

    Il y a un truc que je ne comprend pas. quelqu'un peut m'aider? svp

    Merci d'avance

  2. #2
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Salut !
    EndsWith renvoie un booleen, non ?
    Du coup, ça veut dire quoi :
    If Vitesse(0, 0) = Hexa_Temp.EndsWith("00")

    ça compile ?

    [EDIT]
    Ah tiens, par ailleurs :
    Tu ne peux pas faire un truc plus simple genre un tableau à une dimension avec juste les chaînes à afficher ?
    Ensuite, tu pourrais extraire l'indice de ton Hexa_temp et accéder directement à la bonne valeur vitesse(i), non ?

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  3. #3
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    A priori tu as un couple code / libellé avec des codes uniques, je te conseille alors de regarder l'utilisation d'un dictionnaire (classe Dictionary si tu utilises le framework 2 ou plus, Hashtable sinon). Ce sera beaucoup plus simple à écrire et maintenir que ton tableau
    Pas de questions techniques par MP

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Re,

    Merci à vous deux pour vos réponses.

    Je débute en vb et je ne connais pas tout. mais en cherchant entre temps ds la msdn j'ai trouvé une autre solution qui consiste à utiliser un switch.

    voici mon nouveau code à la place des "If", et ça marche :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    If NoeudsIterateur5.CurrentPosition = 2 Then
                            'Traitement sur les vitesses voie 1
                            Row(Idx_Row, 6) = Microsoft.VisualBasic.Switch(Hexa_Temp.EndsWith("00"), Vitesse(0, 1), Hexa_Temp.EndsWith("01"), Vitesse(1, 1), _
                            Hexa_Temp.EndsWith("02"), Vitesse(2, 1), Hexa_Temp.EndsWith("03"), Vitesse(3, 1), Hexa_Temp.EndsWith("04"), Vitesse(4, 1), _
                            Hexa_Temp.EndsWith("05"), Vitesse(5, 1), Hexa_Temp.EndsWith("06"), Vitesse(6, 1))
     
                            'Traitement sur les vitesses voie 0
                            Row(Idx_Row + 1, 6) = Microsoft.VisualBasic.Switch(Hexa_Temp2.EndsWith("00"), Vitesse(0, 1), Hexa_Temp2.EndsWith("01"), Vitesse(1, 1), _
                            Hexa_Temp2.EndsWith("02"), Vitesse(2, 1), Hexa_Temp2.EndsWith("03"), Vitesse(3, 1), Hexa_Temp2.EndsWith("04"), Vitesse(4, 1), _
                            Hexa_Temp2.EndsWith("05"), Vitesse(5, 1), Hexa_Temp2.EndsWith("06"), Vitesse(6, 1))
                        End If
    Cela me prend bien la bonne valeur de mon tableau en fonction de Hexa_temp (en effet, j'avais mal géré le retour booléen de EndsWith() )

    Encore merci, je garde de toute manière vos conseils qui me seront sans doute utiles.

    ---
    ps : StormimOn, sympas l'avatar

  5. #5
    Expert éminent
    Avatar de StormimOn
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mai 2005
    Messages
    2 593
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : France, Sarthe (Pays de la Loire)

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

    Informations forums :
    Inscription : Mai 2005
    Messages : 2 593
    Points : 7 660
    Points
    7 660
    Par défaut
    Ça fonctionne peut être, mais ça reste moins propre qu'un dictionnaire, et ce n'est pas juste pour faire mon chieur hein

    En supposant que tu sois avec le framework 2, voici ce que cela pourrait donner (c'est du C# mais ca reste compréhensible je pense ^^).
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    Dictionary<string, string> vitesses = new Dictionary<string, string>();
    vitesses.Add("00", "1200 bit/s");
    vitesses.Add("01", "2400 bit/s");
    vitesses.Add("02", "4800 bit/s");
    vitesses.Add("03", "9600 bit/s");
    vitesses.Add("04", "19200 bit/s");
    vitesses.Add("05", "38400 bit/s");
    vitesses.Add("06", "57600 bit/s");
     
    // On récupère le code qui se trouve à la fin (00, 01, 02, ...)
    string leCode = Hexa_Temp.SubString(Hexa_Temp.Length-2, 2);
     
    // On récupère la vitesse associée
    string vitesse = vitesses[leCode];
    C'est tout de même plus simple
    Pas de questions techniques par MP

  6. #6
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    Si on récupère les propositions de Pacman & StorminOn on peut faire encore plus simple (à mon humble avis) en utilisant un tableau plutôt qu'un dico ...
    Et ce n'est pas juste pour faire mon chieur hein

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Vitesse () as String = { "1200 bit/s", "2400 bit/s", etc... }
    Dim Index as integer = Cint(Hexa_Temp.SubString(Hexa_Temp.Length-2, 2))
    dim CurrentVitesse as String = Vitesse(Index)

  7. #7
    En attente de confirmation mail
    Inscrit en
    Août 2006
    Messages
    550
    Détails du profil
    Informations personnelles :
    Âge : 49

    Informations forums :
    Inscription : Août 2006
    Messages : 550
    Points : 669
    Points
    669
    Par défaut
    Citation Envoyé par Totanne Voir le message
    Si on récupère les propositions de Pacman & StorminOn on peut faire encore plus simple (à mon humble avis) en utilisant un tableau plutôt qu'un dico ...
    Et ce n'est pas juste pour faire mon chieur hein

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Dim Vitesse () as String = { "1200 bit/s", "2400 bit/s", etc... }
    Dim Index as integer = Cint(Hexa_Temp.SubString(Hexa_Temp.Length-2, 2))
    dim CurrentVitesse as String = Vitesse(Index)
    En supposant que la variable Hexa_Temp contienne que du numérique...
    On pourrait en douter vu le nom de la variable....

  8. #8
    Membre actif
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    240
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2007
    Messages : 240
    Points : 254
    Points
    254
    Par défaut
    En supposant que la variable Hexa_Temp contienne que du numérique...
    D'après les premiers Post, Hexa_Temp se termine toujours par "00", "01", "02", etc ...

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    lol, merci à tous pour vos réponses. j'ai de quoi plancher. en effet, ma solution avec le Switch est par vraiment la meilleur...je l'ai déjà remplacée !

    La variable Hexa_Temp contient des données temporaires qui vont subir une conversion en decimal. donc c'est pas vraiment le problème.

    Et puis, j'appellerai pas des chieurs les gens qui aident

    encore merci !!

  10. #10
    Membre émérite Avatar de pacmann
    Homme Profil pro
    Consulté Oracle
    Inscrit en
    Juin 2004
    Messages
    1 626
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Consulté Oracle
    Secteur : Distribution

    Informations forums :
    Inscription : Juin 2004
    Messages : 1 626
    Points : 2 845
    Points
    2 845
    Par défaut
    Parmi toutes les propositions, ce qu'il faut que tu retiennes, c'est surtout la logique de programmation :
    Les "If" et les "Switch", sont vraiment limitant dans ce cas, puisque tu dois traiter toutes les valeurs une à une. Il n'y a aucune possibilité de "dynamisme".

    Tu imagines s'il te venait à l'idée d'ajouter de nouveaux débits ?
    Ou si tu voudrais proposer une interface permettant de le faire ?
    Tu serais obligé de modifier ton code à chaque fois !

    Une utilisation correcte des tableaux, des dicos et de tous les trucs de type liste te permettront d'avoir un fonctionnement générique, et non énuméré dans ton code...

    (c'est ma photo)
    Paku, Paku !
    Pour les jeunes incultes : non, je ne suis pas un pokémon...

    Le pacblog : http://pacmann.over-blog.com/

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    113
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 113
    Points : 58
    Points
    58
    Par défaut
    Citation Envoyé par pacmann Voir le message
    Parmi toutes les propositions, ce qu'il faut que tu retiennes, c'est surtout la logique de programmation :
    Les "If" et les "Switch", sont vraiment limitant dans ce cas, puisque tu dois traiter toutes les valeurs une à une. Il n'y a aucune possibilité de "dynamisme".

    Tu imagines s'il te venait à l'idée d'ajouter de nouveaux débits ?
    Ou si tu voudrais proposer une interface permettant de le faire ?
    Tu serais obligé de modifier ton code à chaque fois !

    Une utilisation correcte des tableaux, des dicos et de tous les trucs de type liste te permettront d'avoir un fonctionnement générique, et non énuméré dans ton code...
    Oui tout à fait d'accord. le fait est que je débute en prog et que cette logique n'est pas encore très bien acquise (mais ça va venir ).
    J'avais utilisé le Switch car je venais de tomber dessus en cherchant des infos et que cela me paraissait adéquate à ce que je veux faire (pas tout à fait en fait mais bon). il est vrai que j'ai tendance à mettre des 'If' partout alors que certaines méthodes sont bien plus adapté (performances compréhension du code)
    J'ai changé mon code justement en fonction de cela mais merci de me l'avoir rappelé.

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

Discussions similaires

  1. probleme avec un tableau de list
    Par jtlb++ dans le forum C++
    Réponses: 4
    Dernier message: 16/07/2006, 09h17
  2. Probleme avec une chaine STRING !!!
    Par Bebert71 dans le forum C++
    Réponses: 10
    Dernier message: 09/05/2006, 09h29
  3. Probleme avec un tableau
    Par Seth77 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 3
    Dernier message: 13/02/2006, 11h43
  4. Probleme avec un tableau
    Par Death83 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 14
    Dernier message: 09/12/2005, 01h03
  5. [LG]probleme avec l'identificateur STRINGE
    Par youth dans le forum Langage
    Réponses: 3
    Dernier message: 15/08/2003, 01h42

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