LibreOfficeDev 25.8 Help
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 methodes 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.
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.
Onderstaande voorbeelden in Basic en Python gebruiken de methode OpenTextFile om een instantie van de service TextStream te maken.
    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()
  De methodes in de service TextStream zijn meestal gebaseerd op de UNO-interfaces XTextInputStream en XTextOutputStream.
    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  | 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. | 
Ga voor meer informatie over de namen van karaktersets naar IANA's Character Set-pagina. Houd er rekening mee dat LibreOfficeDev niet alle bestaande tekensets implementeert.
| Lijst met methodes in de TextStream-service | ||
|---|---|---|
Sluit de huidige invoer- of uitvoerstroom en leegt de uitvoerbuffer indien relevant. Retourneert True als het bestand succesvol is afgesloten.
myFile.CloseFile(): bool
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.
myFile.ReadAll(): str
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 methodes ReadAll en SplitLines om de inhoud van het bestand in een matrix met tekenreeksen te lezen:
    '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()
  
    fs = CreateScriptService("FileSystem")
    inputFile = fs.OpenTextFile("/home/user/Documents/Students.txt")
    allData = inputFile.ReadAll()
    arrNames = allData.split(inputFile.NewLine)
    # ...
    inputFile.CloseFile()
  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.
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  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.
myFile.SkipLine()
Schrijft een opgegeven aantal lege regels naar de uitvoerstroom.
myFile.WriteBlankLines(lines: int)
lines: Het aantal lege regels dat naar het bestand moet worden geschreven.
Schrijft de gegeven tekenreeks naar de uitvoerstroom als een enkele regel.
Het teken dat is gedefinieerd in de eigenschap NewLine wordt gebruikt als regelscheidingsteken.
myFile.WriteLine(line: str)
line: De te schrijven regel mag leeg zijn.
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.
    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
  
    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()