LibreOffice 25.2 Hjelp
Tjenesten TextStream brukes til å lese sekvensielt fra og skrive til filer som er åpnet eller opprettet med ScriptForge.FileSystem-tjenesten.
Metodene OpenTextFile og CreateTextFile fra FileSystem-tjenesten returnerer en forekomst av TextStream-tjenesten.
Linjeavgrensninger kan spesifiseres av brukeren. I inngangsoperasjoner støttes CR, LF eller CR+LF. I utdataoperasjoner er standard linjeskilletegn den som brukes av operativsystemet.
Linjeskilletegnet for operativsystemet der makroen kjøres kan nås ved å bruke egenskapen SF_String.sfNEWLINE.
Alle operasjoner som trengs for å lese fra eller skrive til en fil (åpne, lese/skrive og lukke) antas å skje under samme makrokjøring.
Eksemplene nedenfor i Basic og Python bruker OpenTextFile-metoden for å lage en forekomst av TextStream-tjenesten.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  Filen må lukkes med CloseFile-metoden etter at alle lese- eller skriveoperasjoner er utført:
    myFile.CloseFile()
  Alternativt kan ressursene som brukes av TextStream-forekomsten frigis ved å bruke Kassere-metoden:
    Set myFile = myFile.Dispose()
  Metodene i TextStream-tjenesten er for det meste basert på XTextInputStream og XTextOutputStream UNO-grensesnitt.
    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  | Navn | Skrivebeskyttet | Type | Beskrivelse | 
|---|---|---|---|
| AtEndOfStream | Ja | Boolean | Brukes i lesemodus. En Sann-verdi indikerer at slutten av filen er nådd. En test som bruker denne egenskapen bør gå foran anrop til ReadLine-metoden. | 
| Encoding | Ja | String | Tegnsettet som skal brukes. Standardkodingen er "UTF-8". | 
| FileName | Ja | String | Returnerer navnet på den gjeldende filen enten i URL-format eller i det opprinnelige operativsystemets format, avhengig av gjeldende verdi for FileName-egenskapen til FileSystem-tjenesten. | 
| IOMode | Ja | String | Indikerer inn-/utgangsmodus. Mulige verdier er "READ", "WRITE" eller "APPEND". | 
| Line | Ja | Long | Returnerer antall linjer som er lest eller skrevet så langt. | 
| NewLine | Nei | String | Setter eller returnerer gjeldende skilletegn som skal settes inn mellom to påfølgende skrevne linjer. Standardverdien er det opprinnelige linjeskilletegnet i gjeldende operativsystem. | 
For å lære mer om navnene på tegnsett, besøk IANAs tegnsett side. Vær oppmerksom på at LibreOffice ikke implementerer alle eksisterende tegnsett.
| Liste over metoder i TextStream-tjenesten | ||
|---|---|---|
Lukker gjeldende inngangs- eller utgangsstrøm og tømmer utgangsbufferen hvis det er relevant. Returnerer Sann hvis filen ble lukket.
myFile.CloseFile(): bool
Returnerer alle de gjenværende linjene i tekststrømmen som én enkelt streng. Linjeskift fjernes ikke.
Den resulterende strengen kan deles i linjer enten ved å bruke Split innebygd Basic-funksjon hvis linjeskilletegnet er kjent, eller med SF_String.SplitLines metoden.
For store filer, bruk ReadAll-metoden sløser med minneressurser. I slike tilfeller anbefales det å lese filen linje for linje ved å bruke ReadLine metoden.
myFile.ReadAll(): str
Tenk på tekstfilen "Students.txt" med følgende innhold (et navn på hver linje):
    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  Eksemplene nedenfor i Basic og Python bruker metodene ReadAll og SplitLines for å lese innholdet i filen inn i en rekke strenger:
    'Laster inn FileSystem-tjenesten
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Åpner tekstfilen med navnene som skal leses
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Leser alt innholdet i inndatafilen som en enkelt streng
    Dim allData as String
    allData = inputFile.ReadAll()
    'Splitter strengen i en matrise
    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()
  Returnerer neste linje i tekststrømmen som en streng. Linjeskift fjernes fra den returnerte strengen.
AtEndOfStream-testen bør gå foran ReadLine-metoden som i eksemplet nedenfor.
En feil vil oppstå hvis AtEndOfStream ble nådd under forrige ReadLine eller SkipLine metodekall.
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  Hopper over neste linje i inndatastrømmen når du leser en TextStream-fil.
Denne metoden kan føre til at AtEndOfStream settes til Sann.
myFile.SkipLine()
Skriver et spesifisert antall tomme linjer til utdatastrømmen.
myFile.WriteBlankLines(lines: int)
linjer: Antall tomme linjer som skal skrives til filen.
Skriver den gitte strengen til utdatastrømmen som en enkelt linje.
Tegnet definert i egenskapen NewLine brukes som linjeskilletegn.
myFile.WriteLine(line: str)
linje: Linjen som skal skrives, kan være tom.
Eksemplene nedenfor i Basic og Python lager en tekstfil i CSV-format der hver linje inneholder en verdi og kvadratet til lastValue er nådd.
    Sub SquaredValuesFile(lastValue as Integer)
        'Instantierer filsystemtjenesten
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Lagerer en tekstfil
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Skriver verdien og verdien i kvadrat, atskilt med ";"
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Lukker filen og frigir ressursene
        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()