Boucle sur la lecture d'un fichier texte + stop

Signaler
Messages postés
135
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
2 décembre 2011
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
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

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Messages postés
135
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
2 décembre 2011

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
Messages postés
135
Date d'inscription
dimanche 19 novembre 2000
Statut
Membre
Dernière intervention
2 décembre 2011

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??
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Nouvelle question ?
Nouveau post : ne mélange pas tout et découpe bien ce que tu as à faire.
--> <technique pour attendre>
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
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
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
74
Ah bah non, du coup, c'est l'inverse :
Do While Stop_Boucle
(sans le Not)