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 :

VB.NET Tableau multidimensionnel [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 45
    Par défaut VB.NET Tableau multidimensionnel
    Bonjour,

    En VB.NET 2010 je suis confronté à une erreur face à un transfert des valeurs d'un tableau multidimensionnel à un tableau unidimensionnel.
    Voici mon code:
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    For i = 0 To UBound(tabSemiFini, 1)
                j = 0
                Do While j <= UBound(tabSemiFini, 2)
                    Select Case j
                        Case 0
                            arrDate(i) = tabSemiFini(i, j)
                        Case 1
                            arrHeure(i) = tabSemiFini(i, j)
                        Case 2
                            If tabSemiFini(i, j) = "SENT" Then
                                strEtat(i) = tabSemiFini(i, j)
                            Else
                                strEtat(i) = tabSemiFini(i, j + 1)
                            End If
                        Case 4
                            strSMSC(i) = tabSemiFini(i, j)
                        Case 5
                            strSVC(i) = tabSemiFini(i, j)
                        Case 6
                            strACT(i) = tabSemiFini(i, j)
                        Case 7
                            strBINF(i) = tabSemiFini(i, j)
                        Case 8
                            strFrom(i) = tabSemiFini(i, j)
                        Case 9
                            strExpediteur(i) = tabSemiFini(i, j)
                        Case 10
                            strFlags(i) = tabSemiFini(i, j)
                        Case 11
                            intTaille(i) = tabSemiFini(i, j)
                        Case 12
                            For j = 12 To UBound(tabSemiFini, 2) - 1
                                strMsg(i) = strMsg(i) & " " & tabSemiFini(i, j)
                                If tabSemiFini(i, j + 1) = "[udh:0:]" Then
                                    strUDH(i) = tabSemiFini(i, j + 1)
                                End If
                                Exit For
                            Next j
     
                    End Select
                    j = j + 1
     
                Loop
    Merci

  2. #2
    Expert éminent Avatar de Pol63
    Homme Profil pro
    .NET / SQL SERVER
    Inscrit en
    Avril 2007
    Messages
    14 199
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Puy de Dôme (Auvergne)

    Informations professionnelles :
    Activité : .NET / SQL SERVER

    Informations forums :
    Inscription : Avril 2007
    Messages : 14 199
    Par défaut
    ca fait des années qu'on ne programme plus comme ca, passe aux collections et à la POO ...

    concernant la question, elle est trop vague et le code est illisible, surtout hors contexte
    Cours complets, tutos et autres FAQ ici : C# - VB.NET

  3. #3
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cazteam Voir le message
    En VB.NET 2010 je suis confronté à une erreur face à un transfert des valeurs d'un tableau multidimensionnel à un tableau unidimensionnel.
    Voici mon code:
    Et c'est quoi l'erreur ? On peut pas deviner quel est ton problème si tu ne l'indiques pas...

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 45
    Par défaut
    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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
     
     Private Sub TraiterLeLogToolStripMenuItem_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles TraiterLeLogToolStripMenuItem.Click
     
            Dim nLignes() As String = txtLog.Lines 'Decoupe le texte principal par ligne
            Dim i, j As Integer
            Dim tampon(0) As String
            Dim tabTri() As String = txtLog.Lines 'Affectation du contenu du 1er Tableau pour preserver son contenu
     
            'Comparer les lignes pour determiner la plus longue des lignes
            For i = 0 To UBound(tabTri) - 1
                For j = i To UBound(tabTri)
                    If tabTri(i).Length < tabTri(j).Length Then
                        tampon(0) = tabTri(i)
                        tabTri(i) = tabTri(j)
                        tabTri(j) = tampon(0)
                    End If
                Next j
            Next
     
            'Pas important juste pour des tests de verité
            MsgBox("La ligne la plus longue est : ligne " & tabTri(0).Length, MsgBoxStyle.Information)
     
            Dim tabProvisoire() As String = tabTri(0).Split(" ") 'Decoupe la chaine la plus longue pour l'affecter
            'au tableau provisoire afin d'avoir une taille maxi  
            Dim tabSemiFini(UBound(nLignes), UBound(tabProvisoire)) As String
            Dim Temp As String 'Tableau temporaire pour recevoir les chaines de chaque ligne découpée
     
            'Decoupons chaque ligne en mots et mise en forme
            For i = 0 To UBound(nLignes)
                Temp = nLignes(i)
                Dim tabTemp() = Temp.Split(" ")
                For j = 0 To UBound(tabTemp)
                    tabSemiFini(i, j) = tabTemp(j)
                    If tabSemiFini(i, j) = "" Then Exit For
                Next j
            Next i
     
    'Chaque valeur du tableau précédent est rangé dans un nouveau tableau
    'Pour une utilisation aisée
     
            Dim tempo As String
            Dim tabFini(-1, UBound(nLignes)) As String
            For i = 0 To UBound(tabSemiFini, 1)
                j = 0
                Do While j <= UBound(tabSemiFini, 2)
                    Select Case j
                        Case 0
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 1
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 2
                            If tabSemiFini(i, j) = "SENT" Then
                                tabFini(i, j) = tabSemiFini(i, j)
                            Else
                                tabFini(i, j) = tabSemiFini(i, j + 1)
                            End If
                        Case 4
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 5
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 6
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 7
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 8
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 9
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 10
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 11
                            tabFini(i, j) = tabSemiFini(i, j)
                        Case 12
                            For j = 12 To UBound(tabSemiFini, 2) - 1
                                tabFini(i, j) = tabFini(i, j) & " " & tabSemiFini(i, j)
                                If tabSemiFini(i, j + 1) = "[udh:0:]" Then
                                    tabFini(i, j) = tabSemiFini(i, j + 1)
                                End If
                                Exit For
                            Next j
     
                    End Select
                    j = j + 1
     
                Loop
            Next i
     
     
            For i = 0 To UBound(tabFini, 1)
                For j = 0 To UBound(tabFini, 2)
                    tempo = tabFini(i, j) & vbCrLf
                Next j
                MsgBox(tempo, MsgBoxStyle.Information) 'Juste un test d'affichage
            Next i
        End Sub
    Je sais que l'in ne programme depuis belle lurette ainsi, c'est juste une partie de mon code que j'ai écrit.

    Voici le nom de l'erreur: IndexOutOfRangeException

  5. #5
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Citation Envoyé par cazteam Voir le message
    Voici le nom de l'erreur: IndexOutOfRangeException
    Sur quelle ligne l'erreur se produit ? Essaie de donner des informations complètes dès le début, ça fera gagner du temps à tout le monde...

    Soit dit en passant, les 2 boucles For imbriquées au début, c'est vraiment pas la façon la plus efficace de faire un tri :
    - la complexité est de O(n²), alors que la plupart des algos de tri ont une complexité de O(n log n)
    - tu réinventes la roue : il existe déjà plein de façons simples de trier un tableau sans avoir à le recoder soi-même

    Et de toutes façons, pour trouver la chaine la plus longue, il n'y a pas besoin de faire un tri : il suffit de parcourir le tableau une seule fois (soit une complexité de O(n))

    Enfin, de toutes façons l'erreur n'est pas là-dedans a priori...

  6. #6
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2012
    Messages
    45
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Côte d'Ivoire

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

    Informations forums :
    Inscription : Avril 2012
    Messages : 45
    Par défaut
    Citation Envoyé par tomlev Voir le message
    Sur quelle ligne l'erreur se produit ? Essaie de donner des informations complètes dès le début, ça fera gagner du temps à tout le monde...

    Soit dit en passant, les 2 boucles For imbriquées au début, c'est vraiment pas la façon la plus efficace de faire un tri :
    - la complexité est de O(n²), alors que la plupart des algos de tri ont une complexité de O(n log n)
    - tu réinventes la roue : il existe déjà plein de façons simples de trier un tableau sans avoir à le recoder soi-même

    Et de toutes façons, pour trouver la chaine la plus longue, il n'y a pas besoin de faire un tri : il suffit de parcourir le tableau une seule fois (soit une complexité de O(n))

    Enfin, de toutes façons l'erreur n'est pas là-dedans a priori...
    Euh oui tu as pleinement raison, je peux dire que suis en version beta

    l'erreur se produit à la ligne 46
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Case 0
    tabFini(i, j) = tabSemiFini(i, j) '<=====

  7. #7
    Rédacteur/Modérateur


    Homme Profil pro
    Développeur .NET
    Inscrit en
    Février 2004
    Messages
    19 875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Paris (Île de France)

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

    Informations forums :
    Inscription : Février 2004
    Messages : 19 875
    Par défaut
    Bah tu as dimensionné tabFini avec un UBound de -1, autrement dit une longueur de 0 dans cette dimension... donc quel que soit l'indice que tu utilises, ce sera forcément en dehors !

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

Discussions similaires

  1. type de donnée tableau multidimensionnel
    Par opheliegomes dans le forum Débuter
    Réponses: 2
    Dernier message: 03/02/2005, 12h29
  2. [C++ .NET] Tableau dynamique
    Par tidou dans le forum VC++ .NET
    Réponses: 18
    Dernier message: 10/10/2004, 15h11
  3. Réponses: 2
    Dernier message: 26/07/2004, 18h08
  4. Réponses: 3
    Dernier message: 26/07/2004, 12h03
  5. [langage] tableau multidimensionnel
    Par totox17 dans le forum Langage
    Réponses: 3
    Dernier message: 03/12/2002, 15h58

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