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.

note

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

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.


note

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

Alle ScriptForge Basic-rutinane og -identifikatorane som vert innleidde med understrek «_» er reserverte for internt bruk. Dei er ikkje meint brukte i Basic-makroar.


Støtt oss!