Service ScriptForge.TextStream

Le service TextStream est utilisé pour lire et écrire séquentiellement dans des fichiers ouverts ou créés à l'aide du service ScriptForge.FileSystem.

Les méthodes OpenTextFile et CreateTextFile du service FileSystem renvoient une instance du service TextStream.

Les délimiteurs de lignes peuvent être spécifiés par l'utilisateur. Dans les opérations d'entrée, CR, LF ou CR+LF sont pris en charge. Dans les opérations de sortie, le délimiteur de ligne par défaut est celui utilisé par le système d'exploitation.

Le délimiteur de ligne du système d'exploitation sur lequel la macro est exécutée est accessible à l'aide de la propriété SF_String.sfNEWLINE.

note

Toutes les opérations nécessaires pour lire ou écrire dans un fichier (ouverture, lecture/écriture et fermeture) sont présumées se produire au cours de la même exécution de macro.


Invocation du service

Les exemples ci-dessous en Basic et Python utilisent la méthode OpenTextFile pour créer une instance du service TextStream.

En Basic :

    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  

Le fichier doit être fermé avec la méthode CloseFile après que toutes les opérations de lecture ou d'écriture aient été exécutées :


    myFile.CloseFile()
  

Facultativement, les ressources utilisées par l'instance TextStream peuvent être libérées à l'aide de la méthode Dispose :


    Set myFile = myFile.Dispose()
  
note

Les méthodes du service TextStream sont principalement basées sur les interfaces UNO XTextInputStream et XTextOutputStream.


En Python

    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  

Propriétés

Nom

Lecture seule

Type

Description

AtEndOfStream

Oui

Boolean

Utilisé en mode lecture. Une valeur True indique que la fin du fichier a été atteinte. Un test utilisant cette propriété doit précéder les appels à la méthode ReadLine.

Encoding

Oui

String

Le jeu de caractères à utiliser. L'encodage par défaut est "UTF-8".

FileName

Oui

String

Renvoie le nom du fichier actuel soit au format URL, soit au format du système d'exploitation natif, en fonction de la valeur actuelle de la propriété FileNaming du service FileSystem.

IOMode

Oui

String

Indique le mode d'entrée/sortie. Les valeurs possibles sont "READ", "WRITE" ou "APPEND".

Line

Oui

Long

Renvoie le nombre de lignes lues ou écrites jusqu'à présent.

NewLine

Non

String

Définit ou renvoie le délimiteur actuel à insérer entre deux lignes écrites successives. La valeur par défaut est le délimiteur de ligne natif du système d'exploitation actuel.


note

Pour en savoir plus sur les noms des jeux de caractères, visitez la page Jeu de caractères de l'IANA. Sachez que LibreOffice n'implémente pas tous les jeux de caractères existants.


Liste des méthodes dans le service textStream

CloseFile
ReadAll

ReadLine
SkipLine

WriteBlankLines
WriteLine


CloseFile

Ferme le flux d'entrée ou de sortie actuel et vide le tampon de sortie le cas échéant. Renvoie True si le fichier a été fermé avec succès.

Syntaxe :

myFile.CloseFile(): bool

ReadAll

Renvoie toutes les lignes restantes du flux de texte sous la forme d'une seule chaîne. Les sauts de ligne ne sont pas supprimés.

La chaîne résultante peut être divisée en lignes soit en utilisant la fonction de base intégrée Split si le délimiteur de ligne est connu, soit avec la méthode SF_String.SplitLines.

Pour les fichiers volumineux, l'utilisation de la méthode ReadAll gaspille des ressources mémoire. Dans de tels cas, il est recommandé de lire le fichier ligne par ligne en utilisant la méthode ReadLine.

Syntaxe :

myFile.ReadAll(): str

Exemple :

Considérons le fichier texte "Students.txt" avec le contenu suivant (un nom dans chaque ligne) :


    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  

Les exemples ci-dessous en Basic et Python utilisent les méthodes ReadAll et SplitLines pour lire le contenu du fichier dans une matrice de chaînes :

En Basic :

    'Charge le service FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Ouvre le fichier texte avec les noms à lire
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Lit tout le contenu du fichier d'entrée sous la forme d'une seule chaîne
    Dim allData as String
    allData = inputFile.ReadAll()
    'Divise la chaîne en une matrice
    Dim arrNames as Variant
    arrNames = SF_String.SplitLines(allData)
    ' (...)
    inputFile.CloseFile()
  
En Python

    fs = CreateScriptService("FileSystem")
    inputFile = fs.OpenTextFile("/home/user/Documents/Students.txt")
    allData = inputFile.ReadAll()
    arrNames = allData.split(inputFile.NewLine)
    # ...
    inputFile.CloseFile()
  

ReadLine

Renvoie la ligne suivante du flux de texte sous forme de chaîne. Les sauts de ligne sont supprimés de la chaîne renvoyée.

Le test AtEndOfStream doit précéder la méthode ReadLine comme dans l'exemple ci-dessous.

Une erreur sera générée si le AtEndOfStream a été atteint lors du précédent appel de méthode ReadLine ou SkipLine.

Syntaxe :

myFile.ReadLine(): str

Exemple :

En Basic :

    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
En Python

    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  

SkipLine

Ignore la ligne suivante dans le flux d'entrée lors de la lecture d'un fichier TextStream.

Cette méthode peut entraîner la définition de AtEndOfStream sur True.

Syntaxe :

myFile.SkipLine()

WriteBlankLines

Écrit un nombre spécifié de lignes vides dans le flux de sortie.

Syntaxe :

myFile.WriteBlankLines(lines: int)

Paramètres :

lines : le nombre de lignes vides à écrire dans le fichier.

WriteLine

Écrit la chaîne donnée dans le flux de sortie sur une seule ligne.

Le caractère défini dans la propriété NewLine est utilisé comme délimiteur de ligne.

Syntaxe :

myFile.WriteLine(line: str)

Paramètres :

line : la ligne à écrire, peut être vide.

Exemple :

Les exemples ci-dessous en Basic et Python créent un fichier texte au format CSV dans lequel chaque ligne contient une valeur et son carré jusqu'à ce que lastValue soit atteint.

En Basic :

    Sub SquaredValuesFile(lastValue as Integer)
        'Instancie le service FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Crée un fichier texte
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Écrit la valeur et la valeur au carré, séparées par ";"
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Ferme le fichier et libère les ressources
        myFile.CloseFile()
        Set myFile = myFile.Dispose()
    End Sub
  
En Python

    def squared_values_file(lastValue):
        fs = CreateScriptService("FileSystem")
        myFile = fs.CreateTextFile("/home/user/Documents/squares.csv")
        myFile.WriteLine("Value;Value Squared")
        for value in range(1, lastValue + 1):
            myFile.WriteLine("{};{}".format(value, value ** 2))
        myFile.CloseFile()
        myFile = myFile.Dispose()
  
warning

Toutes les routines ou identifiants de base ScriptForge qui sont préfixés par un caractère de soulignement "_" sont réservés à un usage interne. Ils ne sont pas destinés à être utilisés dans des macros de base ou des scripts Python.


Aidez-nous !