Toute l'actualité de [self-access.com] en direct sur votre ordinateur !  Vous êtes ici : Accueil » Visual Basic » Scripting Runtime » Ecriture/lecture dans des fichiers texteConnexion
 


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 : 

  1. Vous ouvrez le fichier.
  2. 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.
  3. Vous répétez l'opération jusqu'à ce que vous atteigniez la fin du fichier.
  4. 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 :

  1. Recopiez le code ci-dessous dans un module standard Access.
  2. Faites apparaître la fenêtre Exécution de Visual Basic Editor (Ctrl + G).
  3. 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 :

 


Mes livres sur Access...
[cliquez pour plus d'infos]





Hit-Parade 
 
[ Copyright 1997-2018 hervé inisan, self-access.com Reproduction interdite ]