Pomoč LibreOffice 24.8
Storitev TextStream se uporablja za zaporedno branje in pisanje v datoteke, odprte ali ustvarjene s storitvijo ScriptForge.FileSystem.
Metodi OpenTextFile in CreateTextFile iz storitve FileSystem vrneta instanco storitve TextStream.
Ločila vrstic lahko določi uporabnik. Pri vhodnih operacijah so podprti CR, LF in CR+LF. Pri izhodnih operacijah je privzeto ločilo vrstic tisto, ki ga uporablja operacijski sistem.
Do ločila vrstic za operacijski sistem, v katerem se izvaja makro, lahko dostopate z lastnostjo SF_String.sfNEWLINE.
Za vse operacije, ki potrebujejo branje ali pisanje v datoteko (odpri, beri/piši in zapri), predvidevamo, da se izvršijo med isto izvedbo makra.
Spodnja primera v Basicu in Pythonu uporabljata metodo OpenTextFile, da ustvarita instanco storitve TextStream.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  Po izvedbi vseh operacij branja ali pisanja mora biti datoteka zaprta z metodo CloseFile:
    myFile.CloseFile()
  Po želji lahko vire, ki jih uporablja instanca TextStream, sprostite z uporabo metode Dispose:
    Set myFile = myFile.Dispose()
  Metode v storitvi TextStream večinoma temeljijo na vmesnikih UNO XTextInputStream in XTextOutputStream.
    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  | Ime | Samo za branje | Vrsta | Opis | 
|---|---|---|---|
| AtEndOfStream | Da | Boolean | Uporabljeno v načinu branja. Vrednost True kaže, da je dosežen konec datoteke. Metodo ReadLine bi moral predhajati preizkus te lastnosti. | 
| Encoding | Da | String | Nabor znakov, ki naj bo uporabljen. Privzeta kodiranje je »UTF-8«. | 
| FileName | Da | String | Vrne ime trenutne datoteke v zapisu URL ali v domorodnem zapisu operacijskega sistema, odvisno od trenutne vrednosti lastnosti FileNaming storitve FileSystem. | 
| IOMode | Da | String | Označuje vhodni/izhodni način. Možne vrednosti so "READ", "WRITE" in "APPEND". | 
| Line | Da | Long | Vrne število doslej prebranih ali zapisanih vrstic. | 
| NewLine | Ne | String | Določi ali vrne trenutno ločilo za vstavljanje med dve zaporedni zapisani vrstici. Privzeta vrednost je domorodno ločilo vrstic trenutnega operacijskega sistema. | 
Če želite izvedeti več o imenih naborov znakov, si oglejte stran Nabori znakov IANA (IANA's Character Set) (v angl.). Upoštevajte, da LibreOffice ne podpira vseh obstoječih naborov znakov.
| Seznam metod storitve TextStream | ||
|---|---|---|
Zapre trenutni vhodni ali izhodni tok in izprazni izhodni medpomnilnik, če je potrebno. Vrne True, če je bila datoteka uspešno zaprt.
myFile.CloseFile(): bool
Vrne vse preostale vrstice v toku besedila kot posamezen niz. Prelomi vrstic niso odstranjeni.
Vrnjeni niz je lahko razdeljen po vrsticah z uporabo vgrajene funkcije Basic Split, če je ločilo vrstic znano, ali z metodo SF_String.SplitLines.
Raba metode ReadAll z velikimi datotekami močno obremenjuje vire pomnilnika. V takšnih primerih je priporočeno brati datoteko vrstico za vrstico z metodo ReadLine.
myFile.ReadAll(): str
Vzemimo besedilno datoteko "Students.txt" z naslednjo vsebino (ime v vsaki vrstici):
    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  Spodnja primera v Basicu in Pythonu uporabljata metodi ReadAll in SplitLines za branje vsebine datoteke v polje nizov:
    'Naloži storitev FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Odpre besedilno datoteko z imeni, ki bodo prebrana
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Prebere celotno vsebino vhodne datoteke kot en sam niz
    Dim allData as String
    allData = inputFile.ReadAll()
    'Razdeli niz v polje
    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()
  Vrne naslednjo vrstico v besedilnem toku kot niz. Prelomi vrstice so iz vrnjenega niza odstranjeni.
Preizkus AtEndOfStream mora predhajati metodo ReadLine, tako kot v spodnjem primeru.
Javi napako, če je doseglo AtEndOfStream med prejšnjim klicem metode ReadLine ali SkipLine.
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  Preskoči naslednjo vrstico v vhodnem toku pri branju datoteke TextStream.
Ta metoda lahko konča s AtEndOfStream, nastavljeno na vrednost True.
myFile.SkipLine()
Zapiše navedeno število praznih vrstic v izhodni tok.
myFile.WriteBlankLines(lines: int)
lines: število praznih vrstic, ki jih želite zapisati v datoteko.
Zapiše dani niz v izhodni tok kot eno samo vrstico.
Znak, določen z lastnostjo NewLine, rabi kot ločilo vrstic.
myFile.WriteLine(line: str)
line: vrstica, ki jo želite zapisati, lahko je prazno.
Spodnja primera v Basicu in Pythonu ustvarita besedilno datoteko v zapisu CSV, kjer vsaka vrstica vsebuje vrednost in kvadrat njene vrednosti, dokler ne doseže vrednosti lastValue.
    Sub SquaredValuesFile(lastValue as Integer)
        'Ustvari instanco storitve FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Ustvari besedilno datoteko
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Zapiše Vrednost in Kvadrat vrednosti, ločeni z ";"
        Dim value as Integer
        myFile.WriteLine("Vrednost;Kvadrat vrednosti")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Zapre datoteko in sprosti vire
        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()