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.

note

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

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.


note

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

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.


Bitte unterstützen Sie uns!