Υπηρεσία ScriptForge.TextStream

Η υπηρεσία TextStream χρησιμοποιείται για τη διαδοχική ανάγνωση και εγγραφή σε αρχεία που ανοίγονται ή δημιουργούνται χρησιμοποιώντας την υπηρεσία ScriptForge.FileSystem.

Οι μέθοδοι OpenTextFile και CreateTextFile από την υπηρεσία FileSystem επιστρέφουν μια παρουσία της υπηρεσίας TextStream.

Οι οριοθέτες γραμμής μπορούν να καθοριστούν από τον χρήστη. Στις λειτουργίες εισόδου υποστηρίζονται τα CR, LF ή CR+LF. Στις λειτουργίες εξόδου, το προεπιλεγμένο διαχωριστικό γραμμής είναι αυτό που χρησιμοποιείται από το λειτουργικό σύστημα.

Ο οριοθέτης γραμμής για το λειτουργικό σύστημα όπου εκτελείται η μακροεντολή μπορεί να προσπελαστεί χρησιμοποιώντας την ιδιότητα SF_String.sfNEWLINE.

note

Όλες οι λειτουργίες που απαιτούνται για την ανάγνωση ή την εγγραφή σε ένα αρχείο (άνοιγμα, ανάγνωση/εγγραφή και κλείσιμο) θεωρείται ότι πραγματοποιούνται κατά την ίδια εκτέλεση μακροεντολής.


Κλήση υπηρεσίας

Τα παρακάτω παραδείγματα σε Basic και Python χρησιμοποιούν τη μέθοδο OpenTextFile για να δημιουργήσουν μια παρουσία της υπηρεσίας TextStream.

Σε Basic

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

Το αρχείο πρέπει να κλείσει με τη μέθοδο CloseFile αφού έχουν εκτελεστεί όλες οι λειτουργίες ανάγνωσης ή εγγραφής:


    myFile.CloseFile()
  

Προαιρετικά, οι πόροι που χρησιμοποιούνται από την παρουσία TextStream μπορούν να απελευθερωθούν χρησιμοποιώντας τη μέθοδο Dispose:


    Set myFile = myFile.Dispose()
  
note

Οι μέθοδοι στην υπηρεσία TextStream βασίζονται κυρίως στις διεπαφές UNO XTextInputStream και XTextOutputOextlie .


Σε Python

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

Ιδιότητες

Όνομα

Μόνο για ανάγνωση

Τύπος

Περιγραφή

AtEndOfStream

Ναι

Boolean

Χρησιμοποιείται σε λειτουργία ανάγνωσης. Η τιμή True υποδηλώνει ότι έχει φτάσει το τέλος του αρχείου. Μια δοκιμή που χρησιμοποιεί αυτήν την ιδιότητα θα πρέπει να προηγείται των κλήσεων στη μέθοδο ReadLine.

Encoding

Ναι

String

Το σύνολο χαρακτήρων που θα χρησιμοποιηθεί. Η προεπιλεγμένη κωδικοποίηση είναι "UTF-8".

FileName

Ναι

String

Επιστρέφει το όνομα του τρέχοντος αρχείου, είτε σε μορφή URL, είτε στη μορφή του εγγενούς λειτουργικού συστήματος, ανάλογα με την τρέχουσα τιμή της ιδιότητας FileNaming της υπηρεσίας FileSystem.

IOMode

Ναι

String

Υποδεικνύει τη λειτουργία εισόδου/εξόδου. Πιθανές τιμές είναι "READ", "WRITE" ή "APPEND".

Line

Ναι

Long

Επιστρέφει τον αριθμό των γραμμών που διαβάστηκαν ή γράφτηκαν μέχρι στιγμής.

NewLine

Όχι

String

Ορίζει ή επιστρέφει τον τρέχοντα οριοθέτη που θα εισαχθεί μεταξύ δύο διαδοχικών γραπτών γραμμών. Η προεπιλεγμένη τιμή είναι ο εγγενής διαχωριστής γραμμής στο τρέχον λειτουργικό σύστημα.


note

Για να μάθετε περισσότερα σχετικά με τα ονόματα των συνόλων χαρακτήρων, επισκεφτείτε τη σελίδα Σύνολο χαρακτήρων του IANA. Λάβετε υπόψη ότι το LibreOffice δεν υλοποιεί όλα τα υπάρχοντα σύνολα χαρακτήρων.


Κατάλογος μεθόδων στην υπηρεσία TextStream

CloseFile
ReadAll

ReadLine
SkipLine

WriteBlankLines
WriteLine


CloseFile

Κλείνει την τρέχουσα ροή εισόδου ή εξόδου και αδειάζει την προσωρινή μνήμη εξόδου, εάν χρειάζεται. Επιστρέφει True εάν το αρχείο έκλεισε με επιτυχία.

Σύνταξη:

myFile.CloseFile(): bool

ReadAll

Επιστρέφει όλες τις υπόλοιπες γραμμές στη ροή κειμένου ως μία συμβολοσειρά. Οι αλλαγές γραμμής δεν αφαιρούνται.

Η συμβολοσειρά που προκύπτει μπορεί να χωριστεί σε γραμμές είτε χρησιμοποιώντας την ενσωματωμένη συνάρτηση Basic Split, εάν ο οριοθέτης γραμμής είναι γνωστός, είτε με τη μέθοδο SF_String.SplitLines.

Για μεγάλα αρχεία, η χρήση της μεθόδου ReadAll σπαταλά πόρους μνήμης. Σε τέτοιες περιπτώσεις, συνιστάται η ανάγνωση του αρχείου γραμμή προς γραμμή χρησιμοποιώντας τη μέθοδο ReadLine.

Σύνταξη:

myFile.ReadAll(): str

Παράδειγμα:

Εξετάστε το αρχείο κειμένου "Students.txt" με τα ακόλουθα περιεχόμενα (ένα όνομα σε κάθε γραμμή):


    Herbie Peggy
    Hardy Jarrett
    Edith Lorelle
    Roderick Rosamund
    Placid Everette
  

Τα παρακάτω παραδείγματα σε Basic και Python χρησιμοποιούν τις μεθόδους ReadAll και SplitLines για να διαβάσουν τα περιεχόμενα του αρχείου σε μια σειρά από συμβολοσειρές:

Σε Basic

    'Φορτώνει την υπηρεσία FileSystem
    Dim FSO : FSO = CreateScriptService("FileSystem")
    'Ανοίγει το αρχείο κειμένου με τα ονόματα προς ανάγνωση
    Dim inputFile as Object
    Set inputFile = FSO.OpenTextFile("/home/user/Documents/Students.txt")
    'Διαβάζει όλα τα περιεχόμενα στο αρχείο εισόδου ως μία συμβολοσειρά
    Dim allData as String
    allData = inputFile.ReadAll()
    'Διαιρεί τη συμβολοσειρά σε έναν πίνακα
    Dim arrNames as Variant
    arrNames = SF_String.SplitLines(allData)
    ' (...)
    inputFile.CloseFile()
  
Σε Python

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

ReadLine

Επιστρέφει την επόμενη γραμμή στη ροή κειμένου ως συμβολοσειρά. Οι αλλαγές γραμμής αφαιρούνται από την επιστρεφόμενη συμβολοσειρά.

Η δοκιμή AtEndOfStream θα πρέπει να προηγείται της μεθόδου ReadLine όπως στο παρακάτω παράδειγμα.

Θα προκύψει σφάλμα εάν επιτεύχθηκε το AtEndOfStream κατά την προηγούμενη κλήση της μεθόδου ReadLine ή SkipLine.

Σύνταξη:

myFile.ReadLine(): str

Παράδειγμα:

Σε Basic

    Dim sLine As String
    Do While Not myFile.AtEndOfStream
        sLine = myFile.ReadLine()
        ' (...)
    Loop
  
Σε Python

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

SkipLine

Παραλείπει την επόμενη γραμμή στη ροή εισόδου κατά την ανάγνωση ενός αρχείου TextStream.

Αυτή η μέθοδος μπορεί να έχει ως αποτέλεσμα το AtEndOfStream να οριστεί σε True.

Σύνταξη:

myFile.SkipLine()

WriteBlankLines

Γράφει έναν καθορισμένο αριθμό κενών γραμμών στη ροή εξόδου.

Σύνταξη:

myFile.WriteBlankLines(lines: int)

Παράμετροι:

lines (γραμμές): Ο αριθμός των κενών γραμμών για εγγραφή στο αρχείο.

WriteLine

Γράφει τη δεδομένη συμβολοσειρά στη ροή εξόδου ως μία μοναδική γραμμή.

Ο χαρακτήρας που ορίζεται στην ιδιότητα NewLine χρησιμοποιείται ως οριοθέτης γραμμής.

Σύνταξη:

myFile.WriteLine(line: str)

Παράμετροι:

line (γραμμή): Η γραμμή που θέλετε να γράψετε μπορεί να είναι κενή.

Παράδειγμα:

Τα παρακάτω παραδείγματα σε Basic και Python δημιουργούν ένα αρχείο κειμένου σε μορφή CSV, στο οποίο κάθε γραμμή περιέχει μια τιμή και το τετράγωνό της μέχρι να επιτευχθεί η lastValue.

Σε Basic

    Sub SquaredValuesFile(lastValue as Integer)
        'Δημιουργεί την υπηρεσία FileSystem
        Dim FSO as Variant : FSO = CreateScriptService("FileSystem")
        'Δημιουργεί ένα αρχείο κειμένου
        Dim myFile as Variant : myFile = FSO.CreateTextFile("/home/user/Documents/squares.csv")
        'Γράφει την τιμή και την τιμή στο τετράγωνο, διαχωρισμένες με ";"
        Dim value as Integer
        myFile.WriteLine("Value;Value Squared")
        For value = 1 To lastValue
            myFile.WriteLine(value & ";" & value ^ 2)
        Next value
        'Κλείνει το αρχείο και ελευθερώνει πόρους
        myFile.CloseFile()
        Set myFile = myFile.Dispose()
    End Sub
  
Σε 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

Όλες οι ρουτίνες ή αναγνωριστικά του ScriptForge στη Basic που έχουν το πρόθεμα χαρακτήρα υπογράμμισης "_" δεσμεύονται για εσωτερική χρήση. Δεν προορίζονται να χρησιμοποιηθούν σε μακροεντολές Basic ή σενάρια Python.


Παρακαλούμε, υποστηρίξτε μας!