Contenu

# 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.

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

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.

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

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.

Rubriques connexes

ScriptForge. Service FileSystem

Fonction Input [VBA]

Instruction Open