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!