Vsebina

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

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

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.

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

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

Podobne teme

Storitev ScriptForge.FileSystem service

Funkcija Input [VBA]

Ukaz Open