L'objet TextStream
L'objet TextStream est un "canal" ou "flux" ouvert sur un fichier texte. Il sert à écrire des données dans un fichier texte, ou à lire en lire le contenu.
Un fichier texte se lit ou s'écrit de façon séquentielle :
- Vous ouvrez le fichier.
- Vous lisez une portion du fichier (ligne ou caractère). Ceci provoque automatiquement le déplacement d'un "curseur virtuel" à la position de fichier suivante.
- Vous répétez l'opération jusqu'à ce que vous atteigniez la fin du fichier.
- Vous fermez le fichier.
Comme l'indique l'Explorateur d'objets (touche F2 dans Visual Basic Editor), l'objet TextStream offre 4 propriétés et 9 méthodes :
Propriétés de l'objet TextStream |
|
| Propriété | Description |
AtEndOfLine |
Indique si le curseur de lecture |
AtEndOfStream |
Vaut True
si vous avez
atteint la fin du fichier en lecture. |
Column |
Indique la colonne où se trouve actuellement votre "curseur virtuel" dans le fichier. |
Line |
Idem, avec le numéro de ligne. |
Méthodes de
l'objet TextStream |
|
| Méthodes | Description |
Close |
Ferme le flux. |
Read |
Lit x caractères dans le fichier. |
ReadAll |
Lit tout le fichier et en récupère le résultat dans une chaîne de caractères. |
ReadLine |
Lit une seule ligne dans le fichier (en s'arrêtant donc automatiquement au premier retour chariot trouvé). |
Skip |
Passe un nombre x de caractères dans le fichier. |
SkipLine |
Passe une ligne dans le fichier. |
Write |
Ecrit une chaîne de
caractères dans le fichier. La séquence Write ou WriteLine suivante continuera à la suite de cette
chaîne. |
WriteBlankLines |
Ecrit x lignes vides dans le fichier. |
WriteLine |
Ecrit une chaîne de
caractères dans le fichier, et termine la séquence par un retour à la
ligne. La séquence Write ou WriteLine suivante s'inscrira sous la chaîne de
caractères. |
Ecrire dans un fichier via l'objet TextStream
L'exemple ci-dessous illustre les techniques d'écriture dans un fichier : ouverture du fichier et utilisation des méthodes WriteXYZ. Vérifiez notamment les différences de fonctionnement entre Write et WriteLine.
Une fois le fichier créé, il est ouvert dans le bloc-notes Windows via l'instruction Shell.
Pour lancer le programme :
- Recopiez le code ci-dessous dans un module standard Access.
- Faites apparaître la fenêtre de Visual Basic Editor (Ctrl + G).
- Tapez dans la fenêtre quelque chose comme :
FileWrite "C:\Mes documents\test.txt" puis Entrée.
' ---
' CREATION DE FICHIER
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FileWrite() crée un fichier texte et y
' écrit quelques données.
' ---
' Entrée : strFile <- Chemin complet vers le fichier à créer.
Function FileWrite(ByVal strFile As String)
Dim fso As Scripting.FileSystemObject
Dim fle As Scripting.File
Dim stm As Scripting.TextStream
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Ouvrir le fichier en écriture
Set stm = fso.CreateTextFile(strFile, True)
' Ecrire quelques lignes dans le fichier
With stm
' Ecrire quelques mots les uns sous les autres
.WriteLine "lundi"
.WriteLine "mardi"
.WriteLine "mercredi"
' Ecrire 2 lignes vides
.WriteBlankLines 2
' Ecrire 2 nouvelles lignes
.WriteLine "jeudi"
.WriteLine "vendredi"
' Ecrire dans le fichier le numéro de la ligne actuelle
.WriteLine "Le pointeur est en ligne : " & stm.Line
' Idem avec la colonne
.Write "Le pointeur est en colonne : " & stm.Column
.Write " ...puis en colonne : " & stm.Column
' Fermer le flux
.Close
End With
' Libérer les objets
Set stm = Nothing
Set fso = Nothing
' Ouvrir le fichier dans le bloc-notes Windows
Shell "notepad.exe " & Chr(34) & strFile & Chr(34), vbNormalFocus
End Function
Résultat :

Lire un fichier texte entier
La méthode ReadAll de l'objet TextStream permet de lire un fichier texte en une seule fois, et de stocker le contenu dans une variable String.
Vala comment ça marche :
' ---
' LECTURE DE FICHIER
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FileRead1() lit le contenu d'un fichier texte
' en une seule fois.
' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).
' ---
' Entrée : strFile <- Chemin complet du fichier à lire.
' ---
Function FileRead1(ByVal strFile As String)
Dim fso As Scripting.FileSystemObject
Dim stm As Scripting.TextStream
Dim strTemp As String
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Ouvrir le fichier en écriture
If Not fso.FileExists(strFile) Then
MsgBox "Le fichier [" & strFile & "] n'existe pas !", vbExclamation
Exit Function
End If
Set stm = fso.GetFile(strFile).OpenAsTextStream(ForReading)
strTemp = stm.ReadAll
Debug.Print "CONTENU
DU FICHIER:"
Debug.Print
strTemp
' Libérer les objets
stm.Close
Set stm = Nothing
Set fso = Nothing
End Function
Note
Le listing est volontairement détaillé.
Si vous être un fainéant invétéré, vous pouvez ignorer les variables stm et strTemp et écrire directement :
Debug.Print fso.GetFile(strFile).OpenAsTextStream(ForReading).ReadAll
Lire un fichier texte ligne par ligne
Variante de l'exemple ci-dessus. Cette fois, il s'agit de parcourir le fichier ligne par ligne (on peut imaginer un traitement spécifique sur chaque ligne trouvée). La méthode ReadLine et la propriété AtEndOfStream sont vos amies :o)
' ---
' LECTURE DE FICHIER
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FileRead2() lit le contenu d'un fichier texte
' ligne par ligne. On suppose qu'on ne connaît pas le
' nombre de lignes à l'avance.
' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).
' ---
' Entrée : strFile <- Chemin complet vers le fichier à lire.
' ---
Function FileRead2(ByVal strFile As String)
Dim fso As Scripting.FileSystemObject
Dim stm As Scripting.TextStream
Dim strTemp As String
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Ouvrir le fichier en écriture
If Not fso.FileExists(strFile) Then
MsgBox "Le fichier [" & strFile & "] n'existe pas !", vbExclamation
Exit Function
End If
Set stm = fso.GetFile(strFile).OpenAsTextStream(ForReading)
While Not stm.AtEndOfStream
Debug.Print "Ligne " & stm.Line & " => ";
strTemp = stm.ReadLine
Debug.Print strTemp
Wend
' Libérer les objets
stm.Close
Set stm = Nothing
Set fso = Nothing
End Function
Résultat :

Autres variantes
Si vous souhaitez plus de précision dans la lecture du fichier, l'objet TextStream vous offre encore d'autres méthodes : Read, Skip, SkipLine. Et hop, une ch'tite démo :
' ---
' LECTURE DE FICHIER
' ---
' (c) 2003, Hervé Inisan - www.self-access.com
'
' La fonction FileRead3() lit le contenu du fichier spécifique
' écrit par FileWrite().
' Les résultats sont affichés dans la fenêtre Exécution (Ctrl+G).
' Consultez la fonction FileWrite() pour mieux comprendre la
' structure du fichier et le positionnement en lecture qui en
' découle...
' ---
' Entrée : strFile <- Chemin complet vers le fichier à créer.
' ---
Function FileRead3(ByVal strFile As String)
Dim fso As Scripting.FileSystemObject
Dim stm As Scripting.TextStream
Dim strTemp As String
' Créer une instance du FSO
Set fso = New Scripting.FileSystemObject
' Ouvrir le fichier en écriture
If Not fso.FileExists(strFile) Then
MsgBox "Le fichier [" & strFile & "] n'existe pas !", vbExclamation
Exit Function
End If
Set stm = fso.GetFile(strFile).OpenAsTextStream(ForReading)
With stm
' Lire les 3 premières lettres du fichier
strTemp = .Read(3)
Debug.Print "3 PREMIERES LETTRES: ", strTemp
' A priori, on n'est pas en fin de ligne, ni
' en fin de fichier.
' On le vérifie ?
Debug.Print "FIN DE LIGNE: ", .AtEndOfLine
Debug.Print "FIN DE FICHIER: ", .AtEndOfStream
' Lire la fin de ligne sans la stocker
.SkipLine
' Lire la ligne suivante en entier
strTemp = .ReadLine
Debug.Print "DEUXIEME LIGNE: ", strTemp
' Passer les 4 premiers caractères de la ligne 3
' et lire ce qui suit sans passer par une variable
.Skip 4
Debug.Print "FIN DE LA TROISIME LIGNE: ", .ReadLine
' Passer les 2 lignes vides suivantes
.SkipLine
.SkipLine
' Lire toute la fin du fichier
Debug.Print "RESTE DU FICHIER: "
Debug.Print .ReadAll
' Cette fois, on est en fin de fichier !
Debug.Print "FIN DE FICHIER: ", .AtEndOfStream
' On ferme !
.Close
End With
' Libérer les objets
Set stm = Nothing
Set fso = Nothing
End Function
Résultat :

Dans cet article...
Article mis à jour le 07/02/2009
Propriétés de l'objet TextStream
Méthodes de
l'objet TextStream