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

note

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


    Set myFile = myFile.Dispose()
  
note

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.


note

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

Alle ScriptForge Basic-rutiner eller identifikatorer, der er indledet med et understreget tegn "_" er reserveret til internt brug. Det er ikke meningen, at de skal bruges i Basic-makroer eller Python-scripts.


Støt os venligst!