Indhold

# Tjenesten ScriptForge.TextStream (tekst-strøm)

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.

## Kald af tjeneste

Eksemplerne herunder i Basic og Python bruger metoden OpenTextFile (åbn_tekstfil) til at oprette en instans af tjenesten TextStream (Tekststrøm).

##### I Basic

        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.

##### I Python

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

## Egenskaber

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)
CloseFile ReadAll | ReadLine SkipLine | WriteBlankLines WriteLine

## CloseFile

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.

### Syntaks:

myFile.CloseFile(): bool

## ReadAll

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

### Syntaks:

myFile.ReadAll(): str

### Eksempel:

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:

##### I Basic

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

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

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

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

### Syntaks:

myFile.SkipLine()

## WriteBlankLines

Skriver et angivet antal tomme linjer til output-strømmen.

### Syntaks:

myFile.WriteBlankLines(lines: int)

### Parametre:

linjer: Antallet af tomme linjer, der skal skrives i filen.

## WriteLine

Skriver den givne streng til output-strømmen som en enkelt linje.

Tegnet, der er defineret i egenskaben NewLine (ny linje) bruges som linjeskilletegn.

### Syntaks:

myFile.WriteLine(line: str)

### Parametre:

linie: Den linje, der skal skrives, kan være tom.

### Eksempel:

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.

##### I Basic

        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

##### 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-rutiner eller identifikatorer, der indledes med et understregstegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.

Relaterede emner

Tjenesten ScriptForge.FileSystem

Input (funktion) [VBA]

erklæringen Open