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 :

Question d'imbriquation subrogative [Débutant]


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut Question d'imbriquation subrogative
    Bonjour,

    J'ai en effet un problème avec l'imbrication de mes boucles. J'essaie donc de créer un programme qui recherche quel élément parmi les exécutables de même nom est le plus récent, et de l'installer.. Alors attention, comme on me l'a fait remarquer, ça pique les yeux (âmes sensibles s'abstenir )

    Le problème intervient au niveau de l'imbrication des deux boucle: Ce qui m'intéresse c'est que le while récupère la valeur du j qui s'incrémente, or quand on rentre dans le while, je perds totalement sa valeur (Le print m'affiche 0 , alors que la boucle for en est à j =1,2,3,4,5,6... enfin vous aurez compris). Du coup ma boucle while refait sans arrêt la même chose, 360 fois (c'est la valeur de mon i ).

    Donc si vous avez des solutions à me proposer j'en serait ravie et surtout reconnaissante sachant que ça fait 1 jour que je galère ! Donc Merci d'avance

    PS: Pour ceux qui auraient le temps ou l'envie de me montrer à quoi ressemblerait un programme différent qui fait la même chose ( fait par un pro quoi ) J'en serais ravie.

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    Imports System.IO
    Public Class Form1
     
     
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
     
     
     
            Dim i As Integer = 0
     
            For Each file As String In Directory.GetFiles("P:\CTRL_Projets\DTM_Repository", "*.exe", System.IO.SearchOption.AllDirectories)
     
     
                Dim lStr As String = file
                Dim lDossierNom As String = IO.Path.GetFileName(IO.Path.GetDirectoryName(lStr))
                Dim startIndex As Integer = 30
                Dim length As Integer = 20
                Dim substring As String = file.Substring(startIndex, length)
                Dim LaDate As Date = IO.File.GetLastWriteTime(file)
     
                i = i + 1
     
                ListBox2.Items.Add(LaDate)
                ListBox1.Items.Add(substring)
     
                ListBox5.Items.Add(lDossierNom)
                ListBox6.Items.Add(file)
     
     
     
            Next
     
     
     
     
            Dim nosame As String
            Dim k As Integer = 0
            Dim m As Integer = 0
            Dim j As Integer = m
            Dim nomentier As String = 0
            Dim value As String = ListBox1.Items.Item(j)
            Dim time As Date = ListBox2.Items.Item(j)
     
     
     
     
            For m = 0 To i
     
     
                While k < i
                    ListBox7.Items.Add(j)
     
     
     
                    Dim t1 As Date = ListBox2.Items.Item(j)
                    Dim t2 As Date = ListBox2.Items.Item(k)
                    Dim s1 As String = ListBox1.Items.Item(j)
                    Dim s2 As String = ListBox1.Items.Item(k)
                    Dim n1 As String = ListBox6.Items.Item(j)
                    Dim n2 As String = ListBox6.Items.Item(k)
     
                    s1 = value
                    t1 = time
                    n1 = nomentier
                    ListBox3.Items.Add(nomentier)
                    ListBox3.Items.Add(time)
     
     
                    If String.Compare(s1, s2) = 0 Then
                        'Compare le premier substring au deuxième
     
                        If DateTime.Compare(t1, t2) < 0 Then
                            value = s2
                            nomentier = n2
                            time = t2
                            'Si t2 est plus jeune, il remplace la valeur du premier substring par le deuxième pour le comparer à son tour'
     
                        ElseIf DateTime.Compare(t1, t2) > 0 Then
                            value = s1
                            nomentier = n1
                            time = t1
                            't1 est plus jeune, donc on garde le même substring et on implémente k pour trouver un autre fichier plus jeune '
                        Else
                            value = s1
                            nomentier = n1
                            time = t1
     
                        End If
     
                    ElseIf String.Compare(s1, s2) <> 0 Then
                        nosame = 0
                        value = s1
                        time = t1
                        nomentier = n1
     
                    End If
                    k = k + 1
                    s1 = value
                    t1 = time
                    n1 = nomentier
     
     
     
     
                End While
     
     
                ListBox4.Items.Add(nomentier)
     
     
            Next
     
     
     
     
     
     
     
        End Sub
    End Class

  2. #2
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Bonjour,

    C'est bon cette fois j'ai mis mes lunettes

    J'ai pas regardé de près mais déjà je peux te dire que ton j n'est jamais modifié, donc il reste à 0.

    J@ck.

  3. #3
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Citation Envoyé par J@ckHerror Voir le message
    Bonjour,

    C'est bon cette fois j'ai mis mes lunettes

    J'ai pas regardé de près mais déjà je peux te dire que ton j n'est jamais modifié, donc il reste à 0.

    J@ck.

    My Bad j'ai pas envoyé la bonne version , en fait le m de la boucle c'est un j , enfin je l'avait changé pour voir si c'était pas ça qui bloquait , mais enfait non ..

    Je remet donc le programme sans l'erreur , mais ca marche toujours pas, le j reste toujours à 0

    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
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    Imports System.IO
    Imports System
    Imports System.Drawing
    Public Class Form1
     
        Private Sub CheckedListBox1_SelectedIndexChanged(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles CheckedListBox1.SelectedIndexChanged
     
     
        End Sub
        Private Sub Form1_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
     
     
     
            Dim chemin As String
            chemin = FolderBrowserDialog1.SelectedPath
     
            ListBox3.Items.Add(chemin)
     
     
     
            Dim i As Integer = 0
     
            For Each file As String In Directory.GetFiles("P:\CTRL_Projets\DTM_Repository", "*.exe", System.IO.SearchOption.AllDirectories)
     
     
                Dim lStr As String = file
                Dim lDossierNom As String = IO.Path.GetFileName(IO.Path.GetDirectoryName(lStr))
                Dim startIndex As Integer = 30
                Dim length As Integer = 20
                Dim substring As String = file.Substring(startIndex, length)
                Dim LaDate As Date = IO.File.GetLastWriteTime(file)
     
                i = i + 1
     
                ListBox2.Items.Add(LaDate)
                ListBox2.Visible = False
                ListBox1.Items.Add(substring)
                ListBox1.Visible = False
                ListBox5.Items.Add(lDossierNom)
                ListBox5.Visible = False
                ListBox6.Items.Add(file)
                ListBox6.Visible = False
                ListBox3.Visible = True
     
     
     
            Next
     
     
     
     
            Dim nosame As String
            Dim k As Integer = 0
            Dim m As Integer = 0
            Dim j As Integer = m
            Dim nomentier As String = 0
            Dim value As String = ListBox1.Items.Item(j)
            Dim time As Date = ListBox2.Items.Item(j)
     
     
     
     
            While j < i
     
             k=0
                While k < i
     
                    ListBox7.Items.Add(j)
     
     
     
     
     
                    Dim t1 As Date = ListBox2.Items.Item(j)
                    Dim t2 As Date = ListBox2.Items.Item(k)
                    Dim s1 As String = ListBox1.Items.Item(j)
                    Dim s2 As String = ListBox1.Items.Item(k)
                    Dim n1 As String = ListBox6.Items.Item(j)
                    Dim n2 As String = ListBox6.Items.Item(k)
     
                    s1 = value
                    t1 = time
                    n1 = nomentier
     
     
     
                    If String.Compare(s1, s2) = 0 Then
                        'Compare le premier substring au deuxième
     
                        If DateTime.Compare(t1, t2) < 0 Then
                            value = s2
                            nomentier = n2
                            time = t2
                            'Si t2 est plus jeune, il remplace la valeur du premier substring par le deuxième pour le comparer à son tour'
     
                        ElseIf DateTime.Compare(t1, t2) > 0 Then
                            value = s1
                            nomentier = n1
                            time = t1
                            't1 est plus jeune, donc on garde le même substring et on implémente k pour trouver un autre fichier plus jeune '
                        Else
                            value = s1
                            nomentier = n1
                            time = t1
     
                        End If
     
                    ElseIf String.Compare(s1, s2) <> 0 Then
                        nosame = 0
                        value = s1
                        time = t1
                        nomentier = n1
     
                    End If
                    k = k + 1
                    s1 = value
                    t1 = time
                    n1 = nomentier
     
     
     
     
                End While
     
     
               j=j+1
     
               CheckedListBox1.Items.Add(nomentier)
     
     
            End While
     
     
     
     
     
     
        End Sub
     
     
     
    End Class

  4. #4
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    En fait j'ai l'impression que le premier while contourne le deuxième, c'est à dire qu'il l’exécute mais sans pour autant rentrer dedans et modifier quoi que ce soit..

  5. #5
    Membre émérite
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Juillet 2005
    Messages
    562
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Saône et Loire (Bourgogne)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Distribution

    Informations forums :
    Inscription : Juillet 2005
    Messages : 562
    Par défaut
    Cette fois je vais être plus précis. Tu ne modifie jamais j à l'intérieur de la boucle ... donc il n'est jamais modifié pendant les itérations de ta boucle ... Ton programme fait donc exactement ce que tu lui dit de faire , si tu ne modifie pas la variable à l'intérieur de la boucle ...

    Sinon tu parlais d'un exemple de programme un peu plus pro. Déjà ce que je peux te conseiller c'est de donner de vrai nom a tes variables, surtout quand dans une fonction tu commence à cumule les i,j,z,t ... par exemple des indexCurrent, indexMax, ou dateCurrent et dateCible seront bien plus parlant que i1 i2 d1 d2... et ne me dit pas que c'est plus rapide a écrire stp

    De plus tu pourrais créer des classes et ainsi vraiment faire de la poo...

    J@ck.

  6. #6
    Membre averti
    Femme Profil pro
    Étudiant
    Inscrit en
    Juillet 2017
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 28
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juillet 2017
    Messages : 18
    Par défaut
    Citation Envoyé par J@ckHerror Voir le message
    Cette fois je vais être plus précis. Tu ne modifie jamais j à l'intérieur de la boucle ... donc il n'est jamais modifié pendant les itérations de ta boucle ... Ton programme fait donc exactement ce que tu lui dit de faire , si tu ne modifie pas la variable à l'intérieur de la boucle ...

    Sinon tu parlais d'un exemple de programme un peu plus pro. Déjà ce que je peux te conseiller c'est de donner de vrai nom a tes variables, surtout quand dans une fonction tu commence à cumule les i,j,z,t ... par exemple des indexCurrent, indexMax, ou dateCurrent et dateCible seront bien plus parlant que i1 i2 d1 d2... et ne me dit pas que c'est plus rapide a écrire stp

    De plus tu pourrais créer des classes et ainsi vraiment faire de la poo...

    J@ck.
    Pour les variables, c'est noté je vais modifier leur nom

    Pour la variable, je ne sait pas comment lui dire de la modifier à l'interieur de la boucle, parce que je veux qu'il fasse d'abord un tour complet de k=0 à i, et seulement après modifier la valeur de j, c'est la raison pour laquelle j'ai mis une boucle à l’extérieur.

    Des classe ? OULALA je crois qu'on va y aller mollo

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

Discussions similaires

  1. Question requête imbriquée
    Par antalata dans le forum Oracle
    Réponses: 2
    Dernier message: 08/09/2010, 08h44
  2. requete imbriquée question basique
    Par pelloq1 dans le forum Requêtes
    Réponses: 2
    Dernier message: 28/05/2008, 00h51
  3. Question sur ma structure imbriquées
    Par beegees dans le forum Débuter
    Réponses: 7
    Dernier message: 16/12/2007, 13h43
  4. Question sur SP imbriquées, Transaction et Verrou
    Par Sacha999 dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 26/11/2007, 19h59
  5. Question sur instruction With imbriquée
    Par LadyWasky dans le forum Bases de données
    Réponses: 2
    Dernier message: 14/10/2005, 11h26

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