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.