Service ScriptForge.TextStream

De service TextStream wordt gebruikt om achtereenvolgens te lezen van en te schrijven naar bestanden die zijn geopend of gemaakt met de service ScriptForge.FileSystem.

De methoden OpenTextFile en CreateTextFile van de service FileSystem retourneren een instantie van de service TextStream.

Lijnscheidingstekens kunnen door de gebruiker worden opgegeven. Bij invoerbewerkingen worden CR, LF of CR+LF ondersteund. Bij uitvoerbewerkingen is het standaardregelscheidingsteken het scheidingsteken dat door het besturingssysteem wordt gebruikt.

Het regelscheidingsteken voor het besturingssysteem waarop de macro wordt uitgevoerd, kan worden geopend met behulp van de eigenschap SF_String.sfNEWLINE.

note

Alle bewerkingen die nodig zijn om te lezen van of te schrijven naar een bestand (openen, lezen/schrijven en sluiten) worden verondersteld te gebeuren tijdens dezelfde macro-run.


Service aanroep

Onderstaande voorbeelden in Basic en Python gebruiken de methode OpenTextFile om een instantie van de service TextStream te maken.

In BASIC

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

Het bestand moet worden gesloten met de methode CloseFile nadat alle lees- of schrijfbewerkingen zijn uitgevoerd:


    myFile.CloseFile()
  

Optioneel kunnen de bronnen die worden gebruikt door de instantie TextStream worden vrijgegeven met behulp van de methode Dispose:


    Set myFile = myFile.Dispose()
  
note

De methoden in de service TextStream zijn meestal gebaseerd op de UNO-interfaces XTextInputStream en 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()
  

Eigenschappen

Name

AlleenLezen

Type

Beschrijving

AtEndOfStream

Ja

Boolean

Gebruikt in leesmodus. Een waarde True geeft aan dat het einde van het bestand is bereikt. Een test die deze eigenschap gebruikt, moet voorafgaan aan aanroepen van de ReadLine-methode.

Encoding

Ja

String

De tekenset die moet worden gebruikt. De standaardcodering is "UTF-8".

FileName

Ja

String

Retourneert de naam van het huidige bestand in URL-indeling of in de indeling van het eigen besturingssysteem, afhankelijk van de huidige waarde van de eigenschap FileNaming van de service FileSystem.

IOMode

Ja

String

Geeft de invoer-/uitvoermodus aan. Mogelijke waarden zijn "READ", "WRITE" of "APPEND".

Line

Ja

Long

Retourneert het aantal regels dat tot nu toe is gelezen of geschreven.

NewLine

Nee

String

Stelt of retourneert het huidige scheidingsteken dat tussen twee opeenvolgende geschreven regels moet worden ingevoegd. De standaardwaarde is het native lijnscheidingsteken in het huidige besturingssysteem.


note

Ga voor meer informatie over de namen van karaktersets naar IANA's Character Set-pagina. Houd er rekening mee dat LibreOffice niet alle bestaande tekensets implementeert.


Lijst met methoden in de TextStream-service

CloseFile
ReadAll

ReadLine
SkipLine

WriteBlankLines
WriteLine


CloseFile

Sluit de huidige invoer- of uitvoerstroom en leegt de uitvoerbuffer indien relevant. Retourneert True als het bestand succesvol is afgesloten.

Syntaxis:

myFile.CloseFile(): bool

ReadAll

Retourneert alle resterende regels in de tekststroom als een enkele tekenreeks. Regeleinden worden niet verwijderd.

De resulterende tekenreeks kan in regels worden gesplitst met behulp van de ingebouwde functie Split als het regelscheidingsteken bekend is, of met de methode SF_String.SplitLines.

Voor grote bestanden verspilt het gebruik van de methode ReadAll geheugenbronnen. In dergelijke gevallen wordt aanbevolen om het bestand regel voor regel te lezen met behulp van de methode ReadLine.

Syntaxis:

myFile.ReadAll(): str

Voorbeeld:

Beschouw het tekstbestand "Students.txt" met de volgende inhoud (een naam in elke regel):


    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  

De onderstaande voorbeelden in Basic en Python gebruiken de methoden ReadAll en SplitLines om de inhoud van het bestand in een matrix met tekenreeksen te lezen:

In BASIC

    'Laadt de service FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Opent het tekstbestand met de te lezen namen
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Leest alle inhoud in het invoerbestand als een enkele tekenreeks
    Dim allData as String
    allData = inputFile.ReadAll()
    'Splitst de tekenreeks in een matrix
    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

Retourneert de volgende regel in de tekststroom als een tekenreeks. Regeleinden worden verwijderd uit de geretourneerde tekenreeks.

De test AtEndOfStream moet voorafgaan aan de methode ReadLine, zoals in het onderstaande voorbeeld.

Er wordt een fout gegenereerd als de AtEndOfStream werd bereikt tijdens de vorige methodeaanroep ReadLine of SkipLine.

Syntaxis:

myFile.ReadLine(): str

Voorbeeld:

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

Slaat de volgende regel in de invoerstroom over bij het lezen van een bestand TextStream.

Deze methode kan ertoe leiden dat AtEndOfStream wordt ingesteld op True.

Syntaxis:

myFile.SkipLine()

WriteBlankLines

Schrijft een opgegeven aantal lege regels naar de uitvoerstroom.

Syntaxis:

myFile.WriteBlankLines(lines: int)

Parameters:

lines: Het aantal lege regels dat naar het bestand moet worden geschreven.

WriteLine

Schrijft de gegeven tekenreeks naar de uitvoerstroom als een enkele regel.

Het teken dat is gedefinieerd in de eigenschap NewLine wordt gebruikt als regelscheidingsteken.

Syntaxis:

myFile.WriteLine(line: str)

Parameters:

line: De te schrijven regel mag leeg zijn.

Voorbeeld:

De onderstaande voorbeelden in Basic en Python maken een tekstbestand in CSV-indeling, waarin elke regel een waarde en zijn vierkant bevat totdat lastValue is bereikt.

In BASIC

    Sub SquaredValuesFile(lastValue as Integer)
        'Maakt de service FileSystem aan'
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Maakt een tekstbestand aan
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Schrijft de Waarde en de Waarde in het kwadraat, gescheiden door ";"
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Sluit het bestand en maak bronnen vrij
        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-routines of variabelen die beginnen met een underscore "_" zijn voor intern gebruik. Gebruik deze niet in een Basic of Python-macro.


Help ons, alstublieft!