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 :

Erreur start index [Débutant]


Sujet :

VB.NET

  1. #1
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut Erreur start index
    Bonjour à tous,

    Je souhaite parcourir les items contenu dans une listbox, (qui sont des mots) et également parcourir une list of string. A chaque itération, si le mot de le listbox est le même que le dernier mot de la string, alors je la supprime de la list of string :

    Chaque string contient exactement 3 mots.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    For h = 0 To listbox1.Items.Count - 1
                    For i = Maliste.Count - 1 To 0 Step -1
                        If Maliste(i).Substring(Maliste(i).IndexOf(i)).Split(" ")(2).Contains(listbox1.Items(h).ToString) Then
                            Maliste.RemoveAt(i)
     
                        End If
     
                    Next
                Next
    Lors de l'éxecution j'ai cette erreur :

    Une exception non gérée du type 'System.ArgumentOutOfRangeException' s'est produite dans mscorlib.dll

    Informations supplémentaires : StartIndex ne peut pas être inférieur à zéro.

    Je n'arrive pas a voir ce qui cloche, quelqu'un peut il me renseigner?

    Merci d'avance!

  2. #2
    Membre éprouvé
    Avatar de dkmix
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    619
    Détails du profil
    Informations personnelles :
    Localisation : Jamaïque

    Informations forums :
    Inscription : Septembre 2007
    Messages : 619
    Points : 924
    Points
    924
    Par défaut
    Bonjour,
    Vous faites un "RemoveAt" à l’intérieur d'une boucle "For".
    Donc "Maliste.Count" est susceptible de changer à chaque itération.

    Vous pouvez regardez RemovAll
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
      For Each It As String In ListBox1.Items
                Maliste.RemoveAll(Function(text) text = It)
      Next

  3. #3
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Je ne vois pas où est le problème, car en parcourant ma liste "a l'envers", que l'élément soit supprimer ou pas, le prochain i sera toujours le bon. Je me trompe?

  4. #4
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Bonjour,

    Oui en parcourant la liste à l'envers, ça ne pose pas de problème.
    Mais plutôt que de parcourir les listes, essayer avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     MaListe.RemoveAll(Function(aLine) ListBox1.Items.Contains(aLine.Split(" ")(2)))
    A priori ça devrait répondre à ton besoin.

  5. #5
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Ca a l'air redoutable comme ligne de code Merci beaucoup je vais essayer ça. Par contre j'utilisais une boucle car pour chaque élément supprimé dans la maliste, je supprimais en parallèle des éléments dans une autre. Est il possible de récupérer l'index des éléments supprimer?

  6. #6
    Membre expérimenté
    Homme Profil pro
    Développeur .Net / Delphi
    Inscrit en
    Juillet 2002
    Messages
    738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Eure (Haute Normandie)

    Informations professionnelles :
    Activité : Développeur .Net / Delphi
    Secteur : Finance

    Informations forums :
    Inscription : Juillet 2002
    Messages : 738
    Points : 1 745
    Points
    1 745
    Par défaut
    Ah effectivement, alors en un peu moins bien tu peux faire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Private Function ...
      MaListe.RemoveAll(AddressOf RemoveLine)
    End Function
     
    Private Function RemoveLine(aWord As String) As Boolean
        Dim Index As Integer
        If ListBox1.Items.Contains(aWord.Split(" ")(2)) Then
            Index = MaListe.IndexOf(aWord)
            ...
            Return True
        End If
        Return False
    End Function
    Après il y a peut être mieux mais bon, il faudrait y réflechir ...

  7. #7
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Je déchiffre/test et te tiens ou courant, merci!!

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    concernant l'erreur du début (StartIndex), en décomposant un peu, on comprend mieux d'où vient le souci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
            For h = 0 To ListBox5.Items.Count - 1
                For i = Maliste.Count - 1 To 0 Step -1
                    Dim txt As String = (Maliste(i).Split(" "c))(2)
                    Dim startIndex As Integer = Maliste(i).IndexOf(txt)
                    If Maliste(i).Substring(startIndex).Contains(ListBox5.Items(h).ToString) Then
                        Maliste.RemoveAt(i)
                    End If
                Next
            Next

  9. #9
    Membre régulier
    Homme Profil pro
    Ingénieur
    Inscrit en
    Octobre 2013
    Messages
    101
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Ingénieur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 101
    Points : 80
    Points
    80
    Par défaut
    Merci pour toutes cette considération, la méthode avec les 2 fonctions marche très bien, je peux effectué mon traitement dans la boucle comme voulu

    Par contre Chrismonoye je ne vois pas ce que tu veux me dire?

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

    Informations forums :
    Inscription : Octobre 2006
    Messages : 665
    Points : 1 161
    Points
    1 161
    Par défaut
    Bonjour,
    Citation Envoyé par GuillaumeNcy
    Par contre Chrismonoye je ne vois pas ce que tu veux me dire?
    Oui je répondais essentiellement à ta première question :
    Je n'arrive pas a voir ce qui cloche, quelqu'un peut il me renseigner?
    en essayant de décomposer l'action que tu veux mener :
    Rechercher la position d'un texte dans une chaine afin d'analyser son contenu.

    le texte :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Dim txt As String = Maliste(i).Split(" "c)(2)
    sa position :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Dim startIndex As Integer = Maliste(i).IndexOf(txt)
    Ce qui donne, si on veut tout mettre sur une ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
                    If Maliste(i).Substring(Maliste(i).IndexOf(Maliste(i).Split(" "c)(2))).Contains(ListBox1.Items(h).ToString) Then
                        Maliste.RemoveAt(i)
                    End If
    Voilà, voilà.
    Bonne continuation.

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

Discussions similaires

  1. Erreur : Undefined index !
    Par SebCBien dans le forum Langage
    Réponses: 3
    Dernier message: 21/08/2006, 11h27
  2. [C#]Erreur et index
    Par fafa139 dans le forum Windows Forms
    Réponses: 2
    Dernier message: 22/05/2006, 09h15
  3. [Tableaux] Erreur Undefined index ?
    Par sharin dans le forum Langage
    Réponses: 5
    Dernier message: 28/04/2006, 09h40
  4. [PHPLIB] Obtention d'une erreur undefined index
    Par duplo dans le forum Bibliothèques et frameworks
    Réponses: 10
    Dernier message: 16/02/2006, 15h48
  5. erreur undefined index
    Par istreen dans le forum Langage
    Réponses: 8
    Dernier message: 06/01/2006, 13h09

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