II-D. Les TextStream
Vous l'avez sans doute remarqué, la manipulation de fichier texte en VBA est très limitée. Pour combler ce manque, les développeurs ont souvent accès aux objets
TextStream de la librairie
Microsoft Scripting Runtime.
Même si l'accès est toujours séquentiel, la programmation est grandement simplfiée et parait plus naturelle.
II-D-1. Ouvrir un fichier texte
La méthode
OpenTextFile de l'objet
FileSystemObject permet d'ouvrir ou créer un fichier texte.
Syntaxe :
OpenTextFile(FileName
As String, [IOMode
As IOMode = ForReading], [Create
As Boolean = Faux], [Format
As Tristate = TristateFalse])
As TextStream
- Le paramètre FileName correspond au chemin du fichier.
- IOMode spécifie le mode d'ouverture : ForReading (lecture), ForWriting (écriture), ForAppending (Ajout)
- Lorsque Create est à True, le fichier est créé s'il n'existe pas.
- Si Format est à True, le texte est en Unicode, sinon, il s'agit du codage ASCII.
Exemple :
Dim oFSO
As Scripting.FileSystemObject
Dim oTxt
As Scripting.TextStream
'Instanciation du FSOSet oFSO =
New Scripting.FileSystemObject
Set oTxt = oFSO.OpenTextFile(
"D:\Essai\monfichier.txt", ForReading)
Une nouvelle fois, il faut choisir entre lecture et écriture. Impossible d'utiliser les deux modes simultanément.
La méthode
CreateTextFile peut aussi être utilisée si le fichier n'existe pas encore.
Syntaxe :
CreateTextFile(FileName
As String, [Overwrite
As Boolean = Vrai], [
Unicode As Boolean = Faux])
As TextStream
Dans ce cas, le paramètre
OverWrite écrase un fichier existant s'il est égal à
True.
Une dernière technique peut être utilisée pour instancier un objet
TextStream : utiliser la méthode
OpenAsTextStream depuis un objet
File.
Exemple :
Dim oFSO
As Scripting.FileSystemObject
Dim oFl
As Scripting.File
Dim oTxt
As Scripting.TextStream
'Instanciation du FSOSet oFSO =
New Scripting.FileSystemObject
Set oFl = oFSO.GetFile(
"D:\Essai\monfichier.txt")
Set oTxt = oFl.OpenAsTextStream(ForReading)
II-D-2. Lecture
La lecture d'un fichier texte se fait en positionnant le paramètre
IOMode à
ForReading lors de l'ouverture.
Plusieurs méthodes permettent de lire un ensemble de caractères :
- Read(X) : lit X caractères
- ReadLine : lit toute la ligne
- ReadAll : lit tout le fichier
La lecture se fait à partir de la position courante. Celle-ci est recalculée à chaque appel d'une de ces méthodes. Les propriétés
Line et
Column permettent de la connaître. Si à l'ouverture vous lisez 3 caractères, la position courante devient :
- line(ligne) = 1
- column(colonne) = 4
La propriété
AtEndOfLine permet de savoir si vous êtes à la fin de la ligne. Quant à la propriété
AtEndOfStream, elle détermine si vous êtes à la fin du fichier.
Exemple pour une lecture ligne à ligne :
Dim oFSO
As Scripting.FileSystemObject
Dim oFl
As Scripting.File
Dim oTxt
As Scripting.TextStream
'Instanciation du FSOSet oFSO =
New Scripting.FileSystemObject
Set oFl = oFSO.GetFile(
"D:\Essai\monfichier.txt")
Set oTxt = oFl.OpenAsTextStream(ForReading)
With oTxt
While Not .AtEndOfStream MsgBox .ReadLine
WendEnd With
La méthode
Skip(X) permet de déplacer la position courante de X caractères. La méthode
SkipLine permet de sauter une ligne.
Exemple pour une lecture un caractère sur deux :
Dim oFSO
As Scripting.FileSystemObject
Dim oFl
As Scripting.File
Dim oTxt
As Scripting.TextStream
'Instanciation du FSOSet oFSO =
New Scripting.FileSystemObject
Set oFl = oFSO.GetFile(
"D:\Essai\monfichier.txt")
Set oTxt = oFl.OpenAsTextStream(ForReading)
With oTxt
While Not .AtEndOfStream MsgBox .Read(1) .Skip 1
WendEnd With
N'oubliez pas que les sauts de lignes sont aussi des caractères.
II-D-3. Ecriture
Que le fichier soit ouvert en mode
ForAppending ou
ForWriting n'influe pas sur les méthodes à utiliser :
- Write(Text) : écrit le texte à partir de la position courante
- WriteLine(Text) : écrit le texte dans une nouvelle ligne
- WrtieBlankLine(X) : écrit X lignes vides.
Exemple :
Dim oFSO
As Scripting.FileSystemObject
Dim oFl
As Scripting.File
Dim oTxt
As Scripting.TextStream
Dim i
As Integer'Instanciation du FSOSet oFSO =
New Scripting.FileSystemObject
Set oFl = oFSO.GetFile(
"D:\Essai\monfichier.txt")
Set oTxt = oFl.OpenAsTextStream(ForWriting)
With oTxt
For i = 0 To 10 .WriteLine i
Next i
End With
II-D-4. Fermeture
La fermeture d'un objet
TextStream est simplement obtenue avec l'appel de sa méthode
Close.
Exemple :
Partager