Innhold

# 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.

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

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.

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

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.

Lignende emner

ScriptForge.FileSystem-tjeneste

Inndata Funksjon [VBA]

Åpnings uttrykk