Storitev ScriptForge.TextStream

Storitev TextStream se uporablja za zaporedno branje in pisanje v datoteke, odprte ali ustvarjene s storitvijo ScriptForge.FileSystem.

Metodi OpenTextFile in CreateTextFile iz storitve FileSystem vrneta instanco storitve TextStream.

Ločila vrstic lahko določi uporabnik. Pri vhodnih operacijah so podprti CR, LF in CR+LF. Pri izhodnih operacijah je privzeto ločilo vrstic tisto, ki ga uporablja operacijski sistem.

Do ločila vrstic za operacijski sistem, v katerem se izvaja makro, lahko dostopate z lastnostjo SF_String.sfNEWLINE.

note

Za vse operacije, ki potrebujejo branje ali pisanje v datoteko (odpri, beri/piši in zapri), predvidevamo, da se izvršijo med isto izvedbo makra.


Priklic storitve

Spodnja primera v Basicu in Pythonu uporabljata metodo OpenTextFile, da ustvarita instanco storitve TextStream.

V Basicu

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

Po izvedbi vseh operacij branja ali pisanja mora biti datoteka zaprta z metodo CloseFile:


    myFile.CloseFile()
  

Po želji lahko vire, ki jih uporablja instanca TextStream, sprostite z uporabo metode Dispose:


    Set myFile = myFile.Dispose()
  
note

Metode v storitvi TextStream večinoma temeljijo na vmesnikih UNO XTextInputStream in XTextOutputStream.


V Pythonu

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

Lastnosti

Ime

Samo za branje

Vrsta

Opis

AtEndOfStream

Da

Boolean

Uporabljeno v načinu branja. Vrednost True kaže, da je dosežen konec datoteke. Metodo ReadLine bi moral predhajati preizkus te lastnosti.

Encoding

Da

String

Nabor znakov, ki naj bo uporabljen. Privzeta kodiranje je »UTF-8«.

FileName

Da

String

Vrne ime trenutne datoteke v zapisu URL ali v domorodnem zapisu operacijskega sistema, odvisno od trenutne vrednosti lastnosti FileNaming storitve FileSystem.

IOMode

Da

String

Označuje vhodni/izhodni način. Možne vrednosti so "READ", "WRITE" in "APPEND".

Line

Da

Long

Vrne število doslej prebranih ali zapisanih vrstic.

NewLine

Ne

String

Določi ali vrne trenutno ločilo za vstavljanje med dve zaporedni zapisani vrstici. Privzeta vrednost je domorodno ločilo vrstic trenutnega operacijskega sistema.


note

Če želite izvedeti več o imenih naborov znakov, si oglejte stran Nabori znakov IANA (IANA's Character Set) (v angl.). Upoštevajte, da LibreOffice ne podpira vseh obstoječih naborov znakov.


Seznam metod storitve TextStream

CloseFile
ReadAll

ReadLine
SkipLine

WriteBlankLines
WriteLine


CloseFile

Zapre trenutni vhodni ali izhodni tok in izprazni izhodni medpomnilnik, če je potrebno. Vrne True, če je bila datoteka uspešno zaprt.

Skladnja:

myFile.CloseFile(): bool

ReadAll

Vrne vse preostale vrstice v toku besedila kot posamezen niz. Prelomi vrstic niso odstranjeni.

Vrnjeni niz je lahko razdeljen po vrsticah z uporabo vgrajene funkcije Basic Split, če je ločilo vrstic znano, ali z metodo SF_String.SplitLines.

Raba metode ReadAll z velikimi datotekami močno obremenjuje vire pomnilnika. V takšnih primerih je priporočeno brati datoteko vrstico za vrstico z metodo ReadLine.

Skladnja:

myFile.ReadAll(): str

Primer:

Vzemimo besedilno datoteko "Students.txt" z naslednjo vsebino (ime v vsaki vrstici):


    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  

Spodnja primera v Basicu in Pythonu uporabljata metodi ReadAll in SplitLines za branje vsebine datoteke v polje nizov:

V Basicu

    'Naloži storitev FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Odpre besedilno datoteko z imeni, ki bodo prebrana
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Prebere celotno vsebino vhodne datoteke kot en sam niz
    Dim allData as String
    allData = inputFile.ReadAll()
    'Razdeli niz v polje
    Dim arrNames as Variant
    arrNames = SF_String.SplitLines(allData)
    ' (...)
    inputFile.CloseFile()
  
V Pythonu

    fs = CreateScriptService("FileSystem")
    inputFile = fs.OpenTextFile("/home/user/Documents/Students.txt")
    allData = inputFile.ReadAll()
    arrNames = allData.split(inputFile.NewLine)
    # ...
    inputFile.CloseFile()
  

ReadLine

Vrne naslednjo vrstico v besedilnem toku kot niz. Prelomi vrstice so iz vrnjenega niza odstranjeni.

Preizkus AtEndOfStream mora predhajati metodo ReadLine, tako kot v spodnjem primeru.

Javi napako, če je doseglo AtEndOfStream med prejšnjim klicem metode ReadLine ali SkipLine.

Skladnja:

myFile.ReadLine(): str

Primer:

V Basicu

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

    while not myFile.AtEndOfStream:
        sLine = myFile.ReadLine()
        # ...
  

SkipLine

Preskoči naslednjo vrstico v vhodnem toku pri branju datoteke TextStream.

Ta metoda lahko konča s AtEndOfStream, nastavljeno na vrednost True.

Skladnja:

myFile.SkipLine()

WriteBlankLines

Zapiše navedeno število praznih vrstic v izhodni tok.

Skladnja:

myFile.WriteBlankLines(lines: int)

Parametri:

lines: število praznih vrstic, ki jih želite zapisati v datoteko.

WriteLine

Zapiše dani niz v izhodni tok kot eno samo vrstico.

Znak, določen z lastnostjo NewLine, rabi kot ločilo vrstic.

Skladnja:

myFile.WriteLine(line: str)

Parametri:

line: vrstica, ki jo želite zapisati, lahko je prazno.

Primer:

Spodnja primera v Basicu in Pythonu ustvarita besedilno datoteko v zapisu CSV, kjer vsaka vrstica vsebuje vrednost in kvadrat njene vrednosti, dokler ne doseže vrednosti lastValue.

V Basicu

    Sub SquaredValuesFile(lastValue as Integer)
        'Ustvari instanco storitve FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Ustvari besedilno datoteko
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Zapiše Vrednost in Kvadrat vrednosti, ločeni z ";"
        Dim value as Integer
        myFile.WriteLine("Vrednost;Kvadrat vrednosti")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Zapre datoteko in sprosti vire
        myFile.CloseFile()
        Set myFile = myFile.Dispose()
    End Sub
  
V Pythonu

    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

Vsi podprogrami ali identifikatorji ScriptForge Basic s predpono podčrtaja (»_«) so rezervirani za interno uporabo. Uporabi v makrih Basic ali skriptih Python niso namenjeni.


Podprite nas!