Indhold
Indholdsfortegnelse 🔎︎

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

## Instantiering af en tjeneste

Kodestumpen herunder bruger metoden OpenTextFile til at oprette en forekomst af tjenesten TextStream.

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

Denne tjeneste er fuldt understøttet i sprogene Basic og Python. Alle eksempler udtrykkes med programmeringssproget Basic og kan let konverteres til Python.

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 forekomsten af TextStream (tekst-strøm) kan valgfrit frigives med metoden Dispose (kassér):

          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.

## 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 se mere om tegnsættenes navne besøger du siden IANA's Character Set (tegnsæt). 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() As Boolean

## 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() As String

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

Eksemplet herunder bruger metoderne ReadAll (læs alt) og SplitLines (opdel linjer) til at hente filens indhold ind i en matrix af strenge:

          Sub ReadFile_Example
              '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("~/Documents/Students.txt")
              'Reads all the contents in the input file as a single string
              Dim allData as String
              allData = inputFile.ReadAll()
              'Splits the string into an array
              Dim arrNames as Variant
              arrNames = SF_String.SplitLines(allData)
              ' (...)
              inputFile.CloseFile()
          End Sub

## 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() As String

### Eksempel:

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

## 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 As Long)

### Parametre:

Lines (Linjer): Antallet af tomme linjer, der skal skrives.

## 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 As String)

### Parametre:

Line (Linje): Linjen, der skal skrives; kan være tom.

### Eksempel:

          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("~/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()
              myFile.Dispose()
          End Sub

Alle ScriptForge Basic-rutiner eller identifikatorer, som indledes med et understregningstegn "_" er reserveret til internt brug. De er ikke beregnet til brug i Basic-makroer.

Relaterede emner

Tjenesten ScriptForge.FileSystem

funktionen Input

udtrykket Open (åbn)