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

 .NET Discussion :

Boucle pour faire évoluer le contenu d'une liste [VB.NET]


Sujet :

.NET

  1. #1
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 28
    Points
    28
    Par défaut Boucle pour faire évoluer le contenu d'une liste
    Bonjour,

    J'ai une liste de nom de fichier. Je souhaite parcourir cette liste pour renommer certains des fichiers en fonction de règles que j'ai défini. Lorsque je boucle sur ma liste et que je renomme un des éléments, ma boucle se coupe...

    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
     
    Public Structure structNommage
            Dim tabOld() As String
            Dim newNom As String
    End Structure
    Dim ListFichierACopier As New List(Of String)
    ...
    ...
    ...
     
    Public Sub Maj_tabFichACopier()
            Dim i As Integer = 0
            For Each nom As String In ListFichierACopier
                For Each nommage As structNommage In TabNommage 
                    For Each old As String In nommage.tabOld
                        If nom = old Then
                            nom = nommage.newNom
                            ListFichierACopier(i) = nom
                            GoTo trouvé2
                        End If
                    Next
                Next
    trouvé2:
                i = i + 1
            Next
        End Sub
    Pouvez-vous m'indiquer pourquoi ma boucle ne fonctionne pas ? J'ai également essayé de passer par une liste temporaire (que j'initialise avec le contenue de la liste à traiter) qui contiendrais mes noms de fichiers modifiés afin de ne pas altérer la liste sur laquelle je boucle mais cela ne change rien ! Le pire, c'est qu'en faisant évoluer ma liste temporaire, la liste principale évolue aussi...

    Je ne dois absolument pas me servir des list correctement !

    Merci d'avance !

  2. #2
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Bonjour.

    Une variable itérée ("nom") par une boucle foreach ne doit pas être modifiée par le code car cela lève une exception. La solution est d'utiliser des indices, comme tu l'avais deviné. Il faut donc assigner la nouvelle valeur directement à ListFichierACopier(i), sans modifier "nom" au passage. S'il est important pour la suite de la boucle que "nom" ait aussi la nouvelle valeur, alors il faudra ajouter une nouvelle variable nomModifié ou quelque chose dans ce goût-ci.

    Enfin je ne suis pas familier du VB mais n'y aurait-il pas un problème avec cette ligne : If nom = old Then ? S'agit-il bien d'une comparaison ?

  3. #3
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 28
    Points
    28
    Par défaut
    Ha oui merci ! Effectivement j'avais bien compris que je ne devais pas modifier le contenu de ma liste mais j'vais pas fait gaffe à la variable "nom" ! En passant par la liste temporaire et en utilisant simplement la ligne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ListFichierACopier(i) = nommage.newNom
    cela fonctionne !

    En ce qui concerne la ligne , c'est bien une comparaison mais je ne vois pas ou est le problème ?

  4. #4
    Expert confirmé Avatar de DonQuiche
    Inscrit en
    Septembre 2010
    Messages
    2 741
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 2 741
    Points : 5 485
    Points
    5 485
    Par défaut
    Citation Envoyé par lecknaat Voir le message
    En ce qui concerne la ligne , c'est bien une comparaison mais je ne vois pas ou est le problème ?
    Comme je le disais je ne suis pas familier de VB et je n'étais donc pas certain que ce soit une comparaison plutôt qu'une assignation. Puisque tu confirmes que c'en est une, aucun problème.

  5. #5
    Nouveau membre du Club
    Inscrit en
    Novembre 2005
    Messages
    62
    Détails du profil
    Informations forums :
    Inscription : Novembre 2005
    Messages : 62
    Points : 28
    Points
    28
    Par défaut
    ok merci !

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 12/06/2014, 17h47
  2. Réponses: 2
    Dernier message: 17/05/2012, 01h18
  3. Une boucle pour faire un menu
    Par Invité dans le forum Langage
    Réponses: 6
    Dernier message: 01/01/2012, 22h58
  4. Une boucle pour faire une repetition infini
    Par saibri dans le forum jQuery
    Réponses: 1
    Dernier message: 11/11/2011, 12h24

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