Inhalte

# Dienst ScriptForge.TextStream

Der Dienst TextStream wird verwendet, um sequentiell aus Dateien zu lesen und in Dateien zu schreiben, die mit dem Dienst ScriptForge.FileSystem geöffnet oder erstellt wurden.

Die Methoden OpenTextFile und CreateTextFile des Dienstes FileSystem geben eine Instanz des Dienstes TextStream zurück.

Zeilenbegrenzer können vom Benutzer angegeben werden. Bei Eingabeoperationen werden CR, LF oder CR+LF unterstützt. Bei Ausgabeoperationen ist das Standard-Zeilentrennzeichen dasjenige, das vom Betriebssystem verwendet wird.

Auf das Zeilentrennzeichen für das Betriebssystem, in dem das Makro ausgeführt wird, kann über die Eigenschaft SF_String.sfNEWLINE zugegriffen werden.

Es wird davon ausgegangen, dass alle zum Lesen oder Schreiben in eine Datei erforderlichen Operationen (Öffnen, Lesen/Schreiben und Schließen) während derselben Makroausführung erfolgen.

## Dienstaufruf

Die folgenden Beispiele in Basic und Python verwenden die Methode OpenTextFile, um eine Instanz des Dienstes TextStream zu erstellen.

##### In Basic

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

Nachdem alle Lese- oder Schreiboperationen ausgeführt wurden, muss die Datei mit der Methode CloseFile geschlossen werden:

        myFile.CloseFile()

Optional können die von der Instanz TextStream verwendeten Ressourcen mit der Methode Dispose freigegeben werden:

        Set myFile = myFile.Dispose()

Die Methoden im Dienst TextStream basieren hauptsächlich auf den UNO-Schnittstellen XTextInputStream und XTextOutputStream.

##### In Python

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

## Eigenschaften

Name | Schreibgeschützt | Typ | Beschreibung
--- | --- | --- | ---
AtEndOfStream | Ja | Boolean | Wird im Lesemodus verwendet. Ein Wert True gibt an, dass das Ende der Datei erreicht ist. Ein Test, der diese Eigenschaft verwendet, sollte Aufrufen der Methode ReadLine vorausgehen.
Encoding | Ja | String | Der zu verwendende Zeichensatz. Die Standardcodierung ist „UTF-8“.
FileName | Ja | String | Gibt den Namen der aktuellen Datei entweder im URL-Format oder im Format des nativen Betriebssystems zurück, abhängig vom aktuellen Wert der Eigenschaft FileNaming des Dienstes FileSystem.
IOMode | Ja | String | Zeigt den Eingabe-/Ausgabemodus an. Mögliche Werte sind "READ", "WRITE" oder "APPEND".
Line | Ja | Long | Gibt die Anzahl der bisher gelesenen oder geschriebenen Zeilen zurück.
NewLine | Nein | String | Legt das aktuelle Trennzeichen fest oder gibt es zurück, das zwischen zwei aufeinanderfolgend geschriebenen Zeilen eingefügt werden soll. Der Standardwert ist das native Zeilentrennzeichen im aktuellen Betriebssystem.

Um mehr über die Namen von Zeichensätzen zu erfahren, besuchen Sie die Seite IANA's Character Set. Beachten Sie, dass LibreOffice nicht alle vorhandenen Zeichensätze implementiert.

Liste der Methoden im Dienst "TextStream"
CloseFile ReadAll | ReadLine SkipLine | WriteBlankLines WriteLine

## CloseFile

Schließt den aktuellen Eingabe- oder Ausgabestream und leert gegebenenfalls den Ausgabepuffer. Gibt True zurück, wenn die Datei erfolgreich geschlossen wurde.

### Syntax:

myFile.CloseFile(): bool

## ReadAll

Gibt alle verbleibenden Zeilen im Textstrom als einzelne Zeichenfolge zurück. Zeilenumbrüche werden nicht entfernt.

Die resultierende Zeichenfolge kann entweder mit der eingebauten Basic-Funktion Split in Zeilen aufgeteilt werden, wenn das Zeilentrennzeichen bekannt ist, oder mit der Methode SF_String.SplitLines.

Bei großen Dateien verschwendet die Verwendung der Methode ReadAll Speicherressourcen. In solchen Fällen empfiehlt es sich, die Datei Zeile für Zeile mit der Methode ReadLine zu lesen.

### Syntax:

myFile.ReadAll(): str

### Beispiel:

Betrachten Sie die Textdatei "Students.txt" mit folgendem Inhalt (ein Name in jeder Zeile):

        Herbie Peggy
        Hardy Jarrett
        Edith Lorelle
        Roderick Rosamund
        Placid Everette

Die folgenden Beispiele in Basic und Python verwenden die Methoden ReadAll und SplitLines, um den Inhalt der Datei in eine Matrix von Zeichenfolgen einzulesen:

##### In Basic

        ' Lädt den Dienst "FileSystem"
        Dim FSO : FSO = CreateScriptService("FileSystem")
        ' Öffnet die Textdatei mit den auszulesenden Namen
        Dim inputFile as Object
        Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
        ' Liest den gesamten Inhalt der Eingabedatei als einzelne Zeichenfolge
        Dim allData as String
        allData = inputFile.ReadAll()
        ' Teilt die Zeichenfolge in eine Matrix auf
        Dim arrNames as Variant
        arrNames = SF_String.SplitLines(allData)
        ' (...)
        inputFile.CloseFile()

##### In Python

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

## ReadLine

Gibt die nächste Zeile im Textstrom als Zeichenfolge zurück. Zeilenumbrüche werden aus der zurückgegebenen Zeichenfolge entfernt.

Der Test AtEndOfStream sollte der Methode ReadLine vorangehen, wie im Beispiel unten.

Ein Fehler wird ausgelöst, wenn AtEndOfStream während des vorherigen Methodenaufrufs ReadLine oder SkipLine erreicht wurde.

### Syntax:

myFile.ReadLine(): str

### Beispiel:

##### In Basic

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

##### In Python

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

## SkipLine

Überspringt die nächste Zeile im Eingabestrom beim Lesen einer Datei TextStream.

Diese Methode kann dazu führen, dass AtEndOfStream auf True gesetzt wird.

### Syntax:

myFile.SkipLine()

## WriteBlankLines

Schreibt eine angegebene Anzahl leerer Zeilen in den Ausgabestrom.

### Syntax:

myFile.WriteBlankLines(lines: int)

### Parameter:

lines: Die Anzahl der leeren Zeilen, die in die Datei geschrieben werden sollen.

## WriteLine

Schreibt die angegebene Zeichenfolge als einzelne Zeile in den Ausgabestrom.

Als Zeilentrennzeichen wird das in der Eigenschaft NewLine definierte Zeichen verwendet.

### Syntax:

myFile.WriteLine(line: str)

### Parameter:

line: Die zu schreibende Zeile, kann leer sein.

### Beispiel:

Die folgenden Beispiele in Basic und Python erstellen eine Textdatei im CSV-Format, in der jede Zeile einen Wert und sein Quadrat enthält, bis lastValue erreicht ist.

##### In Basic

        Sub SquaredValuesFile(lastValue as Integer)
            ' Instanziiert den Dienst "FileSystem"
            Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
            ' Erzeugt eine Textdatei
            Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
            ' Schreibt den Wert und den Wert zum Quadrat, getrennt durch ";"
            Dim value as Integer
            myFile.WriteLine("Value;Value Squared")
            For value = 1 To lastValue
                myFile.WriteLine(value & ";" & value ^ 2)
            Next value
            ' Schließt die Datei und gibt Ressourcen frei
            myFile.CloseFile()
            Set myFile = myFile.Dispose()
        End Sub

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

Alle ScriptForge Basic-Routinen oder Bezeichner, denen ein Unterstrich "_" vorangestellt ist, sind für den internen Gebrauch reserviert. Sie sind nicht für die Verwendung in Basic-Makros oder Python-Skripten vorgesehen.

Verwandte Themen

Dienst ScriptForge.FileSystem

VBA-Funktion Input

Anweisung Open