Περιεχόμενα

# Υπηρεσία ScriptForge.TextStream

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

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

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

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

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

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

Τα παρακάτω παραδείγματα σε 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()

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

Για να μάθετε περισσότερα σχετικά με τα ονόματα των συνόλων χαρακτήρων, επισκεφτείτε τη σελίδα Σύνολο χαρακτήρων του 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()

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

Σχετικά θέματα

Υπηρεσία ScriptForge.FileSystem

Συνάρτηση Input [VBA]

Πρόταση Open