LibreOffice 25.2 Hjelp
Tenesta TextStream vert brukt til å lesa sekvensielt frå og skriva til filer som er opna eller laga ved hjelp av tenesta ScriptForge.FileSystem.
Metodane OpenTextFile og CreateTextFile frå tenesta FileSystem returnerer ein førekomst av tenesta TextStream.
Linjeskiljeteikn kan spesifiserast av brukaren. I inndataoperasjonar vert CR, LF eller CR+LF støtta. I utdataoperasjonar er standard linjeskiljeteikn det som vert brukt av operativsystemet.
Du får tilgang til linjeskiljeteiknet for operativsystemet der makroen vert køyrd ved hjelp av eigenskapen SF_String.sfNEWLINE.
Ein går ut frå at alle operasjonar som er nødvendige for å lesa frå eller skriva til ei fil (opna, lesa/skriva og lukka) skjer under same makrokøyringa.
Eksempla nedanfor i Basic og Python brukar metoden OpenTextFile for å setja opp ein førekomst av tenesta TextStream.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  Fila må lukkast med metoden CloseFile etter at alle lese- og skrive-handlingar er utførte:
    myFile.CloseFile()
  Alternativt kan ressursane som vert brukte av førekomsten TextStream frigjevast med metoden Dispose:
    Set myFile = myFile.Dispose()
  Metodane i tenesta TextStream er stort sett baserte 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()
  | Name | Skriveverna | Type | Beskriving | 
|---|---|---|---|
| AtEndOfStream | Ja | Boolean | Vert brukt i lesemodus. Ein True-verdi indikerer at slutten av fila er nådd. Ein test som brukar denne eigenskapen bør utførast før oppkall av metoden ReadLine. | 
| Encoding | Ja | String | Teiknsettet som skal brukast. Standardkodinga er «UTF-8». | 
| FileName | Ja | String | Returnerer namnet på den gjeldande fila i anten URL-format eller i operativsystemet sitt format, avhengig av den gjeldande verdien på eigenskapen FileNaming i tenesta FileSystem. | 
| IOMode | Ja | String | Indikerer inndata-/utdatamodus. Moglege verdiar er «READ», «WRITE» eller «APPEND». | 
| Line | Ja | Long | Returnerer talet på linjer som er lesne eller skrivne så langt. | 
| NewLine | Nei | String | Set eller returnerer gjeldande skiljeteikn som skal setjast inn mellom to linjer som kjem etter kvarandre. Standardverdien er linjeskiljeteiknet brukt av operativsystemet. | 
For å lære meir om namna på teiknsetta, sjå nettsida IANA's Character Set. Ver merksam på at LibreOffice ikkje implementerer alle teiknsetta som finst.
| Liste over metodane i tenesta TextStream | ||
|---|---|---|
Lukker gjeldande inngangs- eller utgangsstraum og tømmer utgangsbuffaren om nødvendig. Returnerer Sann viss fila vart lukka med hell.
myFile.CloseFile(): bool
Returnerer alle dei resterande linjene i tekststraumen som ein enkelt streng. Linjeskift vert ikkje fjerna.
Den resulterande strengen kan delast opp i linjer med den innebygde Basic-funksjonen Split viss linjeskiljeteiknet er kjend, eller med metoden SF_String.SplitLines.
For store filer vil metoden ReadAll sløsa med minneressursane. I slike tilfelle vert det tilrådd å lesa fila linje for linje ved hjelp av metoden ReadLine.
myFile.ReadAll(): str
Sjå på tekstfila «Studenter.txt» med dette innhaldet (eitt namn på kvar linje):
    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  Eksempla nedanfor brukar metodane ReadAll og SplitLines til å lesa innhaldet i fila inn i ei matrise med strengar:
    ' Hentar tenesta FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    ' Opnar tekstfila med dei namna som skal lesast
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Les alt innhaldet i inndatafila som ein enkelt streng
    Dim allData as String
    allData = inputFile.ReadAll()
    'Splitter strengen i ei 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 den neste linja i tekststraumen som ein streng. Linjeskift vert fjerna frå den returnerte strengen.
Testen AtEndOfStream må gjerast før metoden ReadLine slik som i eksempelet nedanfor.
Det vert sett opp ein feil viss AtEndOfStream vart nådd under det førre oppkallet av metodane ReadLine eller SkipLine.
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  Hoppar over den neste linja i inndata-straumen ved lesing av einTextStream.
Denne metoden kan resultera i at AtEndOfStream vert sett til Sann.
myFile.SkipLine()
Skriv eit spesifisert tal på tomme linjer til utdata-straumen.
myFile.WriteBlankLines(lines: int)
Lines: Talet på tomme linjer som skal skrivast inn i fila.
Skriv den gjevne strengen til utdata-straumen som ei enkelt linje.
Teiknet som er definert i eigenskapen NewLine vert brukt som linjeskiljeteikn.
myFile.WriteLine(line: str)
line: Linja som skal skrivast kan vera tom.
Eksempla nedanfor i Basic og Python lagar ei tekstfil i CSV-format der kvar linje inneheld ein verdi og kvadratet på han til lastValue er nådd.
    Sub SquaredValuesFile(lastValue as Integer)
        ' Byrjar tenesta FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        ' Lagar ei tekstfil
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        ' Skriv verdien og kvadratet av verdien skilde med «;»
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        ' Lukkar fila og frigjev ressursar
        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()