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
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)
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
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
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??
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)
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