Nápověda LibreOffice 24.8
Služba TextStream se používá k postupnému čtení/zápisu z/do souborů otevřených či vytvořených pomocí služby ScriptForge.FileSystem.
Instanci služby TextStream vrátí metody OpenTextFile a CreateTextFile ze služby FileSystem.
Uživatel může určit oddělovače řádků. Při vstupních operacích je možné použít CR, LF nebo CR+LF. Při výstupních operacích je výchozím oddělovačem řádků ten, který je používán operačním systémem.
Oddělovač řádků pro operační systém, v němž je marko spuštěno, lze získat z vlastnosti SF_String.sfNEWLINE.
Předpokládá se, že všechny operace potřebné k čtení ze souboru nebo zápisu do něj (otevření, čtení/zápis a zavření) budou provedeny během téhož běhu makra.
Níže uvedené příklady v Basicu a Pythonu používají pro vytvoření instance služby TextStream metodu OpenTextFile.
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  Po provedení všech operací čtení či zápisu je nutné soubor uzavřít pomocí metody CloseFile:
    myFile.CloseFile()
  Zdroje použité instancí služby TextStream lze také uvolnit metodou Dispose:
    Set myFile = myFile.Dispose()
  Metody služby TextStream jsou zpravidla založeny na rozhraních UNO XTextInputStream a XTextOutputStream.
    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  | Název | Pouze pro čtení | Typ | Popis | 
|---|---|---|---|
| AtEndOfStream | ano | Boolean | Použito v režimu čtení. Hodnota True značí, že bylo dosaženo konce souboru. Kontrola provedená touto metodou by měla předcházet volání metody ReadLine. | 
| Encoding | ano | String | Znaková sada, která se má použít. Výchozím kódováním je "UTF-8". | 
| FileName | ano | String | Vrátí název aktuálního souboru buď ve formátu URL, nebo v nativním formátu operačního systému, a to podle aktuální hodnoty vlastnosti FileNaming služby FileSystem. | 
| IOMode | ano | String | Udává režim vstupu/výstupu. Možnými hodnotami jsou "READ" (čtení), "WRITE" (zápis) a "APPEND" (přidávání). | 
| Line | ano | Long | Vrátí počet doposud přečtených či zapsaných řádků. | 
| NewLine | ne | String | Nastaví nebo vrátí aktuální oddělovač vkládaný mezi dva následující zapisované řádky. Výchozí hodnotou je nativní oddělovač řádků z aktuálního operačního systému. | 
Podrobnosti o názvech znakových sad naleznete na stránce znakových sad IANA. Mějte na paměti, že v LibreOffice nemusí být všechny znakové sady implementovány.
| Seznam metod služby TextStream | ||
|---|---|---|
Zavře aktuální vstupní či výstupní proud a vyprázdní výstupní buffer, je-li to relevantní. V případě úspěšného uzavření vrátí True.
myFile.CloseFile(): bool
Vrátí všechny řádky zbývající v textovém proudu jako jediný řetězec. Zalomení řádků nejsou odstraněna.
Výsledný řetězec je možné rozdělit na řádky pomocí vestavěné funkce Basicu Split, je-li oddělovač řádků znám, nebo metodou SF_String.SplitLines.
U velkých souborů znamená použití metody ReadAll zbytečně velké paměťové nároky. V takových případech je doporučeno číst řádky souboru po jednom pomocí metody ReadLine.
myFile.ReadAll(): str
Textový soubor "Students.txt" obsahuje následující řádky (jméno na každém z nich):
    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  V níže uvedených příkladech v Basicu a Pythonu se využívají metody ReadAll a SplitLines k načtení obsahu souboru do pole řetězců:
    ' Načte službu FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    ' Otevře textový soubor se jmény, která se mají načíst
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    ' Načte celý obsah vstupního souboru jako jediný řetězec
    Dim allData as String
    allData = inputFile.ReadAll()
    ' Rozdělí řetězec na pole
    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()
  Vrátí následující řádek v textovém proudu jako řetězec. Zalomení řádků jsou z vraceného řetězce odstraněna.
Metodě ReadLine by měla předcházet kontrola vlastnosti AtEndOfStream, stejně jako v níže uvedeném příkladu.
Jestliže byl dosažen konec souboru představovaný vlastností AtEndOfStream během volání metody ReadLine nebo SkipLine, nastane chyba.
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  Přeskočí při čtení ze souboru TextStream ve vstupním proudu následující řádek.
Výsledkem této metody může být nastavení vlastnosti AtEndOfStream na hodnotu True.
myFile.SkipLine()
Zapíše do výstupního proudu zadaný počet prázdných řádků.
myFile.WriteBlankLines(lines: int)
lines: Počet prázdných řádků, které se mají do souboru zapsat.
Zapíše do výstupního proudu zadaný řetězec jako jeden řádek.
Jako oddělovač řádků se použije znak definovaný ve vlastnosti NewLine.
myFile.WriteLine(line: str)
line: Řádek, který se má zapsat, může být prázdný.
V níže uvedených příkladech v Basicu a Pythonu se vytvoří textový soubor ve formátu CSV, v němž každý řádek obsahuje hodnotu a její druhou mocninu, a to až do hodnoty lastValue.
    Sub SquaredValuesFile(lastValue as Integer)
        ' Vytvoří instanci služby FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        ' Vytvoří textový soubor
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        ' Zapíše hodnoty a jejich druhé mocniny, oddělovačem je středník ";"
        Dim value as Integer
        myFile.WriteLine("Hodnota;Druhá mocniny hodnoty")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        ' Zavře soubor a uvolní zdroje
        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()