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 Collabora Office 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!