ScriptForge.TextStream-tjeneste

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.

note

Alle operasjoner som trengs for å lese fra eller skrive til en fil (åpne, lese/skrive og lukke) antas å skje under samme makrokjøring.


Tjenestepåkallelse

Eksemplene nedenfor i Basic og Python bruker OpenTextFile-metoden for å lage en forekomst av TextStream-tjenesten.

I Basic

    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()
  
note

Metodene i TextStream-tjenesten er for det meste basert på XTextInputStream og XTextOutputStream UNO-grensesnitt.


I Python

    from scriptforge import CreateScriptService
    fs = CreateScriptService("FileSystem")
    myFile = fs.OpenTextFile(r"C:\Temp\ThisFile.txt", fs.ForReading)
    # ...
    myFile.CloseFile()
    myFile = myFile.Dispose()
  

Egenskaper

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.


note

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

CloseFile
ReadAll

ReadLine
SkipLine

WriteBlankLines
WriteLine


CloseFile

Lukker gjeldende inngangs- eller utgangsstrøm og tømmer utgangsbufferen hvis det er relevant. Returnerer Sann hvis filen ble lukket.

Syntaks:

myFile.CloseFile(): bool

ReadAll

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.

Syntaks:

myFile.ReadAll(): str

Eksempel:

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:

I Basic

    '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()
  
I Python

    fs = CreateScriptService("FileSystem")
    inputFile = fs.OpenTextFile("/home/user/Documents/Students.txt")
    allData = inputFile.ReadAll()
    arrNames = allData.split(inputFile.NewLine)
    # ...
    inputFile.CloseFile()
  

ReadLine

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.

Syntaks:

myFile.ReadLine(): str

Eksempel:

I Basic

    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
I Python

    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  

SkipLine

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.

Syntaks:

myFile.SkipLine()

WriteBlankLines

Skriver et spesifisert antall tomme linjer til utdatastrømmen.

Syntaks:

myFile.WriteBlankLines(lines: int)

Parametre:

linjer: Antall tomme linjer som skal skrives til filen.

WriteLine

Skriver den gitte strengen til utdatastrømmen som en enkelt linje.

Tegnet definert i egenskapen NewLine brukes som linjeskilletegn.

Syntaks:

myFile.WriteLine(line: str)

Parametre:

linje: Linjen som skal skrives, kan være tom.

Eksempel:

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.

I Basic

    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
  
I Python

    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()
  
warning

Alle ScriptForge Grunnleggende rutiner eller identifikatorer som er prefikset med et understrekingstegn "_" er reservert for intern bruk. De er ikke ment å brukes i grunnleggende makroer eller Python-skript.


Supporter oss!