LibreOffice 25.2 Hjælp
Tjenesten TextStream bruges til fortløbende at læse og skrive i de filer, der er åbnet eller oprettet med tjenesten ScriptForge.FileSystem.
Metoderne OpenTextFile (åbn tekstfil) og CreateTextFile (opret tekstfil) fra tjenesten FileSystem (filsystem) returnerer en instans af tjenesten TextStream (tekst-strøm).
Linjeskilletegn kan være angivet af brugeren. I input-handlinger understøttes CR, LF eller CR+LF. I output-handlinger er standard-linjetegnet det, der bruges af operativsystemet.
Linjeskilletegnet i det operativsystem, hvor makroen bliver udført, kan tilgås med egenskaben SF_String.sfNEWLINE (ny linje).
Alle handlinger, der er nødvendige til at læse fra og skrive til en fil (åbne, læse/skrive og lukke) antages at finde sted under den samme makrokørsel.
Eksemplerne herunder i Basic og Python bruger metoden OpenTextFile (åbn_tekstfil) til at oprette en instans af tjenesten TextStream (Tekststrøm).
    GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
    Dim FSO As Variant
    FSO = CreateScriptService("FileSystem")
    Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)
  Filen skal lukkes med metoden CloseFile (luk fil), efter at alle læse- og skrive-handlinger er udført:
    myFile.CloseFile()
  Ressourcerne, der blev brugt af instansen af TextStream (tekst-strøm) kan valgfrit frigives med metoden Dispose (bortskaf):
    Set myFile = myFile.Dispose()
  Metoderne i tjenesten TextStream (tekst-strøm) er hovedsagelig baseret på XTextInputStream (x tekst input strøm) og XTextOutputStream (x tekst output strøm) UNO-brugerflader.
    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  | Navn | Readonly (skrivebeskyttet) | Type (type) | Beskrivelse | 
|---|---|---|---|
| AtEndOfStream | Yes (ja) | Boolean | Brugt i læsetilstand. Værdien True (sand) påpeger at slutningen af filen er nået. En test med denne egenskab bør gå forud for kald af metoden ReadLine (læs linje). | 
| Encoding | Yes (ja) | String | Tegnsættet, der skal bruges. Standard-tegnsættet er "UTF-8". | 
| FileName | Ja | String | Returnerer navnet på den aktuelle fil i enten URL-format eller i operativsystemets format, afhængigt af den aktuelle værdi af egenskaben FileNaming (Filnavngivelse) i tjenesten FileSystem (Filsystem). | 
| IOMode | Yes (ja) | String | Viser input/output-tilstanden. Mulige værdier er "READ" (læs), "WRITE" (skriv) eller "APPEND" (tilføj). | 
| Line | Yes (ja) | Long | Returnerer antallet af hidtil læste eller skrevne linjer. | 
| NewLine | Nej | String | Sætter eller returnerer det aktuelle skilletegn, der skal indsættes mellem to på hinanden følgende linjer. Standardværdien er det aktuelle operativsystems eget linjeskilletegn. | 
For at lære mere om navnene på tegnsæt, se siden IANA's Character Set. Vær opmærksom på, at LibreOffice ikke implementerer alle eksisterende tegnsæt.
| Liste over metoderne i tjenesten TextStream (tekst-strøm) | ||
|---|---|---|
Lukker den aktuelle input- eller output-strøm og tømmer output-bufferen, hvis det er relevant. Returnerer True (sand), hvis filen blev lukket med succes.
myFile.CloseFile(): bool
Returnerer alle resterende linjer i tekststrømmen som en enkelt streng. Linjeskift fjernes ikke.
Den resulterende streng kan deles op i linjer med den indbyggede Basic-funktion Split (opdel), hvis linjeskilletegnet er kendt, eller med metoden SF_String.SplitLines (opdel linjer).
Ved større filer spilder brug af metoden ReadAll (læs alt) hukommelsesressourcer. I sådanne tilfælde anbefales det at læse filen linjevis med metoden ReadLine (læs linje).
myFile.ReadAll(): str
Tænk på tekstfilen "Students.txt" med dette indhold (et navn på hver linje):
    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  Eksemplerne herunder i Basic og Python bruger metoderne ReadAll (læs_alt) og SplitLines (opdel_linjer) til at læse filens indhold ind i en matrix af strenge:
    'Henter tjenesten FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Åbner tekstfilen med de navne, der skal læses
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    ' Læs hele input-filens indhold som en enkelt streng
    Dim allData as String
    allData = inputFile.ReadAll()
    ' Opdeler streng til en 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()
  Returnerer den næste linje i tekststrømmen som en streng. Linjeskift fjernes fra den returnerede streng.
Testen AtEndOfStream (ved slut på strøm) bør gå forud for metoden ReadLine (læs linje) som i eksemplet herunder.
Der sættes et fejlflag, hvis AtEndOfStream (ved slut på strøm) blev nået under det forrige kald af metoderne ReadLine (læs linje) eller SkipLine (spring over linje).
myFile.ReadLine(): str
    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  Springer den næste linje i input-strømmen over under læsning af enTextStream (tekst-strøm)-fil.
Denne metode kan resultere i, at AtEndOfStream (ved slut på strømmen) sættes til True (sand).
myFile.SkipLine()
Skriver et angivet antal tomme linjer til output-strømmen.
myFile.WriteBlankLines(lines: int)
linjer: Antallet af tomme linjer, der skal skrives i filen.
Skriver den givne streng til output-strømmen som en enkelt linje.
Tegnet, der er defineret i egenskaben NewLine (ny linje) bruges som linjeskilletegn.
myFile.WriteLine(line: str)
linie: Den linje, der skal skrives, kan være tom.
Eksemplerne herunder i Basic og Python opretter en tekstfil i CSV-format, hvor hver linje indeholder en værdi og kvadratet på den, indtil lastValue (sidste_værdi) er nået.
    Sub SquaredValuesFile(lastValue as Integer)
        'Instantierer tjenesten FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Opretter en tekstfil
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Skriver værdien og kvadratet af værdien, adskilt af ";"
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared") (min fil.Skriv linje ("værdi, kvadrat af værdi)
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Lukker filen og frigør ressourcer
        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()