Boucle sur la lecture d'un fichier texte + stop

Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011 - 6 juil. 2010 à 16:39
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 - 6 juil. 2010 à 19:42
Bonjour,
Je lis ligne par ligne un fichier texte!
Pourriez-vous m'aider à faire que la lecture se face en boucle?
C'est-à-dire qu'une fois a la fin du fichier la lecture recommence depuis le début et qu'il soit possible de la stopper à l'aide d'un bouton ?

' Déclaration de la variable qui sera utilisée lire dans le fichier
Dim Ligne As String


Private Sub Bt_Lire_Click()
 ' Appel de la fonction Sub OuvertureFichier()
    Call OuvertureFichier
End Sub

Sub OuvertureFichier()
    ' Ouverture du fichier en lecture
    Open "C:\Liste.txt" For Input As #1
            ' Tant que le fichier n'est pas fini
            While Not EOF(1)
            ' Lecture de la ligne
            Line Input #1, Ligne
            ' Affichage de la ligne courante qui vient d'être lue
            MsgBox (Ligne)
        Wend
    ' Fermeture du fichier
    Close #1
End Sub


Merci pour votre aide!

8 réponses

cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 17:57
Salut
Tu n'as tout dit, je pense.
Une fois qu'un fichier est ouvert, il ne peut être modifié par aucun autre programme, VB se l'accapare. Donc, à quoi te sert de relire les mêmes données ?
Je suis curieux : Dans quel but veux-tu faire cette lecture en boucle ?

De toute façon, la méthode est la même, suffira de la mettre au bon endroit :
Tu vas relire <ce précédent message> où tout est expliqué.

Important : le DoEvents à l'intérieur de ta boucle

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 18:03
Oups
L'histoire du bouton et sa variable Public bAnnuler est expliqué, mais j'ai oublié la boucle :
Do While Not bAnnuler
    ' Ici, le programme que tu veux faire tourner en boucle
    DoEvents
Loop

Si tu veux faire stopper la boucle de lecture des données en plein milieu des données, il faudra :
- Utiliser des commandes plus modernes :
While-Wend est obsolète.
Il faut utiliser Do-Loop (tu as juste à changer les noms des commandes)
- quand tu voudras tester si c'est nécessaire de stopper :
If bAnnuler Then Exit Do
- Là aussi, si tu veux que ton programme détecte efficacement la demande de stop, il faudra insérer un DoEvents dans cette boucle
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
6 juil. 2010 à 18:12
Merci Jack,

Bon ça marche, mais ai-je bien respecté toutes tes indications?

' Déclaration de la variable qui sera utilisée lire dans le fichier
Dim Ligne As String
' Déclaration de la variable qui sera utilisée pour arrèter la boucle
Dim Stop_Boucle As Boolean

Private Sub Bt_Lire_Click()
    'Activation de la variable
    Stop_Boucle = True
        'Définition de la valeur de départ
        x = 1
                'Valeur que la bouque doit atteindre "le maxi"
                Do While x < 1000000
                    ' Appel de la fonction Sub OuvertureFichier()
                    Call OuvertureFichier
            'Conditionnement de l'arret de la boucle
            If Stop_Boucle = False Then
                'Quit
                Exit Do
            End If
        'Incrémentation de 1
        x = x + 1
    DoEvents
Loop

End Sub

Sub OuvertureFichier()
    ' Ouverture du fichier en lecture
    Open "C:\Liste.txt" For Input As #1
            ' Tant que le fichier n'est pas fini
            While Not EOF(1)
            ' Lecture de la ligne
            Line Input #1, Ligne
            ' Affichage de la ligne courante qui vient d'être lue
            'MsgBox (Ligne)
            List1.AddItem (Ligne)
        Wend
    ' Fermeture du fichier
    Close #1
End Sub

Private Sub Bt_Stop_Click()
    'Désactivation de la variable
    Stop_Boucle = False
End Sub
0
Leo_Robotic_Passion Messages postés 135 Date d'inscription dimanche 19 novembre 2000 Statut Membre Dernière intervention 2 décembre 2011
6 juil. 2010 à 18:39
Bon cette fois ça se complique un peux!
J'aimerais mettre un intervalle entre chaque lecture de lignes.
Je pensais a un timer mais je voix pas trop comment l'intégrer??
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 19:33
Non :
Comme expliqué dans le lien :
- Créer la variable booléenne en Public dans un Module
- Dans le bouton_click, juste la mise à True de cette variable

Dans ton programme, il te suffisait de rajouter une boucle autour de ton code existant :
Do While Not bAnnuler
    ' Ici, Ici, Ici, Ici, Ici, Ici, Ici, Ici, Ici, Ici
    '   ton code existant que tu nous a montré en début
    '   qui commence par Open et finit par Close
    DoEvents
Loop



Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 19:35
Nouvelle question ?
Nouveau post : ne mélange pas tout et découpe bien ce que tu as à faire.
--> <technique pour attendre>
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 19:41
Après relecture, oui, tu as raison, ta structure est bonne, je pensais que la variable était déclarée dans la Sub. (mauvaise vue à mon age)

Ah, tu as pris la variable à l'envers, pourquoi pas.
En tout logique, elle devrait alors s'appeler bContinuer, non

Dans ta boucle actuelle, la boucle s'arrêtera après le millionième tour : pourquoi surcharger avec cette variable de comptage ?
un Do While Not bAnnuler suffit
0
cs_Jack Messages postés 14006 Date d'inscription samedi 29 décembre 2001 Statut Modérateur Dernière intervention 28 août 2015 79
6 juil. 2010 à 19:42
Ah bah non, du coup, c'est l'inverse :
Do While Stop_Boucle
(sans le Not)
0
Rejoignez-nous