Innhald

# Tenesta ScriptForge.TextStream

Tenesta TextStream vert brukt til å lesa sekvensielt frå og skriva til filer som er opna eller laga ved hjelp av tenesta ScriptForge.FileSystem.

Metodane OpenTextFile og CreateTextFile frå tenesta FileSystem returnerer ein førekomst av tenesta TextStream.

Linjeskiljeteikn kan spesifiserast av brukaren. I inndataoperasjonar vert CR, LF eller CR+LF støtta. I utdataoperasjonar er standard linjeskiljeteikn det som vert brukt av operativsystemet.

Du får tilgang til linjeskiljeteiknet for operativsystemet der makroen vert køyrd ved hjelp av eigenskapen SF_String.sfNEWLINE.

Ein går ut frå at alle operasjonar som er nødvendige for å lesa frå eller skriva til ei fil (opna, lesa/skriva og lukka) skjer under same makrokøyringa.

## Oppkall av tenester

Eksempla nedanfor i Basic og Python brukar metoden OpenTextFile for å setja opp ein førekomst av tenesta TextStream.

##### I Basic

        GlobalScope.BasicLibraries.LoadLibrary("ScriptForge")
        Dim FSO As Variant
        FSO = CreateScriptService("FileSystem")
        Set myFile = FSO.OpenTextFile("C:\Temp\ThisFile.txt", FSO.ForReading)

Fila må lukkast med metoden CloseFile etter at alle lese- og skrive-handlingar er utførte:

        myFile.CloseFile()

Alternativt kan ressursane som vert brukte av førekomsten TextStream frigjevast med metoden Dispose:

        Set myFile = myFile.Dispose()

Metodane i tenesta TextStream er stort sett baserte 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()

## Eigenskapar

Name | Skriveverna | Type | Beskriving
--- | --- | --- | ---
AtEndOfStream | Ja | Boolean | Vert brukt i lesemodus. Ein True-verdi indikerer at slutten av fila er nådd. Ein test som brukar denne eigenskapen bør utførast før oppkall av metoden ReadLine.
Encoding | Ja | String | Teiknsettet som skal brukast. Standardkodinga er «UTF-8».
FileName | Ja | String | Returnerer namnet på den gjeldande fila i anten URL-format eller i operativsystemet sitt format, avhengig av den gjeldande verdien på eigenskapen FileNaming i tenesta FileSystem.
IOMode | Ja | String | Indikerer inndata-/utdatamodus. Moglege verdiar er «READ», «WRITE» eller «APPEND».
Line | Ja | Long | Returnerer talet på linjer som er lesne eller skrivne så langt.
NewLine | Nei | String | Set eller returnerer gjeldande skiljeteikn som skal setjast inn mellom to linjer som kjem etter kvarandre. Standardverdien er linjeskiljeteiknet brukt av operativsystemet.

For å lære meir om namna på teiknsetta, sjå nettsida IANA's Character Set. Ver merksam på at LibreOffice ikkje implementerer alle teiknsetta som finst.

Liste over metodane i tenesta TextStream
CloseFile ReadAll | ReadLine SkipLine | WriteBlankLines WriteLine

## CloseFile

Lukker gjeldande inngangs- eller utgangsstraum og tømmer utgangsbuffaren om nødvendig. Returnerer Sann viss fila vart lukka med hell.

### Syntaks:

myFile.CloseFile(): bool

## ReadAll

Returnerer alle dei resterande linjene i tekststraumen som ein enkelt streng. Linjeskift vert ikkje fjerna.

Den resulterande strengen kan delast opp i linjer med den innebygde Basic-funksjonen Split viss linjeskiljeteiknet er kjend, eller med metoden SF_String.SplitLines.

For store filer vil metoden ReadAll sløsa med minneressursane. I slike tilfelle vert det tilrådd å lesa fila linje for linje ved hjelp av metoden ReadLine.

### Syntaks:

myFile.ReadAll(): str

### Eksempel:

Sjå på tekstfila «Studenter.txt» med dette innhaldet (eitt namn på kvar linje):

        Herbie Peggy
        Hardy Jarrett
        Edith Lorelle
        Roderick Rosamund
        Placid Everette

Eksempla nedanfor brukar metodane ReadAll og SplitLines til å lesa innhaldet i fila inn i ei matrise med strengar:

##### I Basic

        ' Hentar tenesta FileSystem
        Dim FSO : FSO = CreateScriptService("FileSystem")
        ' Opnar tekstfila med dei namna som skal lesast
        Dim inputFile as Object
        Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
        'Les alt innhaldet i inndatafila som ein enkelt streng
        Dim allData as String
        allData = inputFile.ReadAll()
        'Splitter strengen i ei 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 den neste linja i tekststraumen som ein streng. Linjeskift vert fjerna frå den returnerte strengen.

Testen AtEndOfStream må gjerast før metoden ReadLine slik som i eksempelet nedanfor.

Det vert sett opp ein feil viss AtEndOfStream vart nådd under det førre oppkallet av metodane ReadLine eller SkipLine.

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

Hoppar over den neste linja i inndata-straumen ved lesing av einTextStream.

Denne metoden kan resultera i at AtEndOfStream vert sett til Sann.

### Syntaks:

myFile.SkipLine()

## WriteBlankLines

Skriv eit spesifisert tal på tomme linjer til utdata-straumen.

### Syntaks:

myFile.WriteBlankLines(lines: int)

### Parametrar:

Lines: Talet på tomme linjer som skal skrivast inn i fila.

## WriteLine

Skriv den gjevne strengen til utdata-straumen som ei enkelt linje.

Teiknet som er definert i eigenskapen NewLine vert brukt som linjeskiljeteikn.

### Syntaks:

myFile.WriteLine(line: str)

### Parametrar:

line: Linja som skal skrivast kan vera tom.

### Eksempel:

Eksempla nedanfor i Basic og Python lagar ei tekstfil i CSV-format der kvar linje inneheld ein verdi og kvadratet på han til lastValue er nådd.

##### I Basic

        Sub SquaredValuesFile(lastValue as Integer)
            ' Byrjar tenesta FileSystem
            Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
            ' Lagar ei tekstfil
            Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
            ' Skriv verdien og kvadratet av verdien skilde med «;»
            Dim value as Integer
            myFile.WriteLine("Value;Value Squared")
            For value = 1 To lastValue
                myFile.WriteLine(value & ";" & value ^ 2)
            Next value
            ' Lukkar fila og frigjev ressursar
            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 Basic-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.

Liknande emne

Tenesta ScriptForge.FileSystem

Input-funksjonen [VBA]

Open-uttrykket

Støtt oss!