Υπηρεσία ScriptForge.Dictionary

Ένα λεξικό είναι μια συλλογή από ζεύγη κλειδιών-στοιχείων

Τα κλειδιά και τα στοιχεία μπορούν να ανακτηθούν, να μετρηθούν, να ενημερωθούν και πολλά άλλα.

Εικονίδιο συμβουλής

LibreOffice Basic Collection object does not support the retrieval of the keys.
Additionally its items contain only primitive Basic data types such as dates, text, numbers, and the like.


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

Το παρακάτω παράδειγμα δημιουργεί το myDict ως κενό λεξικό.


    GlobalScope.BasicLibraries.loadLibrary("ScriptForge")
    Dim myDict As Variant
    myDict = CreateScriptService("Dictionary")
  

Συνιστάται η απελευθέρωση πόρων μετά τη χρήση:


     Set myDict = myDict.Dispose()
  

Ιδιότητες

Όνομα

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

Τύπος

Περιγραφή

Count

Ναι

Long

Ο αριθμός των καταχωρήσεων στο λεξικό

Items

Ναι

Πίνακας παραλλαγών

Ο πίνακας των στοιχείων ως μονοδιάστατος πίνακας

Keys

Ναι

Πίνακας συμβολοσειρών

Ο κατάλογος των κλειδιών ως μονοδιάστατος πίνακας


Εικονίδιο συμβουλής

Οι ιδιότητες Keys και Items επιστρέφουν τα αντίστοιχα περιεχόμενά τους, χρησιμοποιώντας την ίδια σειρά. Η σειρά δεν σχετίζεται με τη σειρά δημιουργίας.


Παράδειγμα:

Το παρακάτω παράδειγμα χρησιμοποιεί την ιδιότητα Keys για επανάληψη σε όλα τα κλειδιά του λεξικού myDict.


    Dim a As Variant, b As String
    a = myDict.Keys
    For Each b In a
        MsgBox(myDict.Item(b))
    Next b
    

Μέθοδοι

Add
ConvertToArray
ConvertToJson
ConvertToPropertyValues

Exists
ImportFromJson
ImportFromPropertyValues
Item

Remove
RemoveAll
ReplaceItem
ReplaceKey


Add

Προσθέτει ένα νέο ζεύγος κλειδιών-στοιχείων στο λεξικό. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


          myDict.Add(Key As String, Item As Variant) As Boolean
        

Παράμετροι:

Key : String value used to identify the Item. The key is not case-sensitive.

Item : Any value, including an array, a Basic object, a UNO object, a dictionary, etc.

Παράδειγμα:


          Dim NewValue As Variant
          myDict.Add("NewKey", NewValue)
       
warning

Κάθε κλειδί πρέπει να είναι μοναδικό στο ίδιο λεξικό. Εάν το κλειδί υπάρχει ήδη στο λεξικό, θα εμφανιστεί ένα DUPLICATEKEYERROR. Τα κλειδιά που αποτελούνται από χαρακτήρες διαστήματος θα δημιουργήσουν σφάλμα INVALIDKEYERROR.


ConvertToArray

Αποθηκεύει τα περιεχόμενα του λεξικού σε έναν πίνακα δύο στηλών με βάση το μηδέν. Τα κλειδιά αποθηκεύονται στην πρώτη στήλη και τα στοιχεία αποθηκεύονται στη δεύτερη στήλη.

Εάν το λεξικό είναι κενό, αυτή η μέθοδος θα επιστρέψει έναν κενό Array (Πίνακα).

Σύνταξη:


          myDict.ConvertToArray() As Variant
        

Παράδειγμα:


        Dim myDict as Variant
        myDict = CreateScriptService("Dictionary")
        myDict.Add("a", 1)
        myDict.Add("b", 2)
        myDict.Add("c", 3)
        Dim arr as Variant
        arr = myDict.ConvertToArray()
        '(("a", 1), ("b", 2), ("c", 3))
      

ConvertToJson

Μετατρέπει τα περιεχόμενα ενός λεξικού σε κείμενο JSON (JavaScript Object Notation).

Περιορισμοί

Αυτή η μέθοδος υποστηρίζει τους ακόλουθους τύπους δεδομένων: String (Συμβολοσειρά), Boolean (τιμές Μπουλ), αριθμούς, Null και Empty (Κενό). Επιτρέπονται επίσης πίνακες που περιέχουν στοιχεία αυτού του τύπου, ανεξάρτητα από τις διαστάσεις τους. Οι ημερομηνίες μετατρέπονται σε συμβολοσειρές, ωστόσο δεν μπορούν να χρησιμοποιηθούν μέσα στους Πίνακες. Άλλοι τύποι δεδομένων μετατρέπονται στην αναπαράσταση συμβολοσειράς τους χρησιμοποιώντας την υπηρεσία SF_String.Represent.

Σύνταξη:


            myDict.ConvertToJson([Indent As Variant]) As String
        

Παράμετροι:

Indent : When Indent is a positive number or a text, JSON array elements and object members are pretty-printed with that indentation level. A negative Indent value will add new lines with no indentation. Indent default value "" selects the most compact representation. Using a positive integer for Indent indents that many spaces per level. When Indent is a string, such as Chr(9) or Tab(1), the Tab character is used to indent each level.

Παράδειγμα:


            myDict.Add("p0", 12.5)
            myDict.Add("p1", "a string àé""ê")
            myDict.Add("p2", DateSerial(2020,9,28))
            myDict.Add("p3", True)
            myDict.Add("p4", Array(1,2,3))
            MsgBox myDict.ConvertToJson()    
            '{"p0": 12.5, "p1": "a string \u00e0\u00e9\"\u00ea", "p2": "2020-09-28", "p3": true, "p4": [1, 2, 3]}
        

ConvertToPropertyValues

Store the content of the dictionary in an array of PropertyValues.

Κάθε καταχώρηση στον πίνακα είναι μια com.sun.star.beans.PropertyValue. Το κλειδί αποθηκεύεται στο Name (Όνομα), το στοιχείο αποθηκεύεται στο Value (Τιμή).

Εάν ένα από τα στοιχεία έχει τύπο Date (Ημερομηνία), μετατρέπεται σε δομή com.sun.star.util.DateTime. Εάν ένα από τα στοιχεία είναι κενός πίνακας, μετατρέπεται σε Null. Ο πίνακας που προκύπτει είναι κενός όταν το λεξικό είναι κενό.

Σύνταξη:


          myDict.ConvertToPropertyValues() As Variant
        

Παράδειγμα:


          Dim myDict as Variant
          myDict = CreateScriptService("Dictionary")
          'Προσθέτει κάποιες ιδιότητες στο λεξικό
          myDict.Add("Color", "Blue")
          myDict.Add("Width", 20)
          'Μετατρέπεται σε έναν πίνακα αντικειμένων PropertyValue
          Dim prop as Variant
          prop = myDict.ConvertToPropertyValues()
        
tip

Many services and methods in the UNO library take in parameters represented using the PropertyValue struct, which is part of the LibreOffice API.


Exists

Καθορίζει εάν υπάρχει ένα κλειδί στο λεξικό.

Σύνταξη:


          myDict.Exists(Key As String) As Boolean
        

Παράμετροι:

Key : The key to be looked up in the dictionary.

Παράδειγμα:


          Dim myDict as Variant
          myDict = CreateScriptService("Dictionary")
          'Προσθέτει κάποιες ιδιότητες στο λεξικό
          myDict.Add("Color", "Blue")
          myDict.Add("Width", 20)
          '(...)
          If Not myDict.Exists("Size") Then
             MsgBox "You have to provide a Size value"
          End If
        

ImportFromJson

Προσθέτει το περιεχόμενο μιας συμβολοσειράς JSON (JavaScript Object Notation) στο τρέχον λεξικό. Επιστρέφει True εάν είναι επιτυχής.

Περιορισμοί

Η συμβολοσειρά JSON μπορεί να περιέχει αριθμούς, κείμενο, τιμές Μπουλ, μηδενικές τιμές και πίνακες που περιέχουν αυτούς τους τύπους. Δεν πρέπει να περιέχει αντικείμενα JSON και συγκεκριμένα υπολεξικά.

Γίνεται προσπάθεια μετατροπής κειμένου σε ημερομηνία, εάν το στοιχείο ταιριάζει με ένα από αυτά τα μοτίβα: ΕΕΕΕ-ΜΜ-ΗΗ, ΩΩ:ΛΛ:ΔΔ, ή ΕΕΕΕ-ΜΜ-ΗΗ ΩΩ:ΛΛ:ΔΔ.

Σύνταξη:


            myDict.ImportFromJson(InputStr As String, [Overwrite As Boolean]) As Boolean
        

Παράμετροι:

InputStr : The string to import.

Overwrite : When True, entries with same name may exist in the dictionary and their values are overwritten. When False (default), repeated keys will raise an error. Beware that dictionary keys are not case-sensitive while names are case-sensitive in JSON strings.

Παράδειγμα:


            Dim s As String
            s = "{'firstName': 'John','lastName': 'Smith','isAlive': true,'age': 66, 'birth':  '1954-09-28 20:15:00'" _
                & ",'address': {'streetAddress': '21 2nd Street','city': 'New York','state': 'NY','postalCode': '10021-3100'}" _
                & ",'phoneNumbers': [{'type': 'home','number': '212 555-1234'},{'type': 'office','number': '646 555-4567'}]" _
                & ",'children': ['Q','M','G','T'],'spouse': null}"
            s = Replace(s, "'", """")
            myDict.ImportFromJson(s, OverWrite := True)
            'Τα (υπο)-λεξικά "address" και "phoneNumbers" (0) και (1) εισάγονται ως κενές τιμές (Empty).
        

ImportFromPropertyValues

Εισάγει τα περιεχόμενα ενός πίνακα αντικειμένων PropertyValue στο τρέχον λεξικό. Τα ονόματα PropertyValue χρησιμοποιούνται ως κλειδιά στο λεξικό, ενώ οι Values (τιμές) περιέχουν τις αντίστοιχες τιμές. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


            myDict.ImportFromPropertyValues(PropertyValues As Variant [, Overwrite As Boolean]) As Boolean
        

Παράμετροι:

PropertyValues : A zero-based 1 dimensional array containing com.sun.star.beans.PropertyValue objects. This parameter may also be a single PropertyValue object not contained in an Array.

Overwrite : When True, entries with same name may exist in the dictionary and their values are overwritten. When False (default), repeated keys will raise an error. Note that dictionary keys are not case-sensitive, whereas names are case-sensitive in sets of property values.

Παράδειγμα:


            Dim vProp As New com.sun.star.beans.PropertyValue
            vProp.Name = "prop"
            vProp.Value = CDateToUnoDateTime(Now)
            myDict.ImportFromPropertyValues(vProp, Overwrite := True)
        

Item

Ανακτά μια υπάρχουσα καταχώρηση λεξικού με βάση το κλειδί της. Επιστρέφει την τιμή του στοιχείου εάν είναι επιτυχές, διαφορετικά επιστρέφει Empty (Κενό).

Σύνταξη:


          myDict.Item(Key As String) As Variant
        

Παράμετροι:

Key : Not case-sensitive. Must exist in the dictionary, otherwise a UNKNOWNKEYERROR error is raised.

Παράδειγμα:

Το παρακάτω παράδειγμα επαναλαμβάνεται σε όλα τα κλειδιά του λεξικού και χρησιμοποιεί τη μέθοδο Item (στοιχείο) για πρόσβαση στις τιμές τους.


          Dim myDict as Variant, k as Variant, allKeys as Variant
          myDict = CreateScriptService("Dictionary")
          myDict.Add("key1", 100)
          myDict.Add("key2", 200)
          myDict.Add("key3", 300)
          allKeys = myDict.Keys
          For Each k in allKeys
             MsgBox(myDict.Item(k))
          Next k
       

Remove

Καταργεί μια υπάρχουσα καταχώρηση λεξικού με βάση το κλειδί της. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


          myDict.Remove(Key As String) As Boolean
        

Παράμετροι:

Key : Not case-sensitive. Must exist in the dictionary, otherwise an UNKNOWNKEYERROR error is raised.

Παράδειγμα:


          myDict.Add("key1", 100)
          myDict.Add("key2", 200)
          myDict.Add("key3", 300)
          MsgBox(myDict.Count) 'Prints "3"
          myDict.Remove("key2")
          MsgBox(myDict.Count) 'Prints "2"
       

RemoveAll

Αφαιρεί όλες τις καταχωρήσεις από το λεξικό. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


          myDict.RemoveAll() As Boolean
        

Παράδειγμα:


          myDict.Add("key1", 100)
          myDict.Add("key2", 200)
          myDict.Add("key3", 300)
          MsgBox(myDict.Count) 'Prints "3"
          myDict.RemoveAll()
          MsgBox(myDict.Count) 'Prints "0"
        

ReplaceItem

Αντικαθιστά μια υπάρχουσα τιμή στοιχείου με βάση το κλειδί του. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


          myDict.ReplaceItem(Key As String, Value As Variant) As Boolean
        

Παράμετροι:

Key : String value representing the key whose value will be replaced. Not case-sensitive. If the key does not exist in the dictionary, a UNKNOWNKEYERROR error is raised.

Value : The new value of the item referred to with the Key parameter.

Παράδειγμα:


          myDict.Add("a", 1)
          MsgBox(myDict.Item("a")) 'Prints "1"
          myDict.ReplaceItem("a", 100)
          MsgBox(myDict.Item("a")) ' Prints "100"
       

ReplaceKey

Αντικαθιστά ένα υπάρχον κλειδί στο λεξικό με ένα νέο κλειδί. Η τιμή του στοιχείου παραμένει αμετάβλητη. Επιστρέφει True εάν είναι επιτυχής.

Σύνταξη:


          myDict.ReplaceKey(Key As String, Value As String) As Boolean
        

Παράμετροι:

Key : String value representing the key to be replaced. Not case-sensitive. If the key does not exist in the dictionary, a UNKNOWNKEYERROR error is raised.

Value : String value for the new key. Not case-sensitive. If the new key already exists in the dictionary, a DUPLICATEKEYERROR error is raised.

Παράδειγμα:


          myDict.Add("oldKey", 100)
          MsgBox(myDict.Item("oldKey")) 'Prints "100"
          myDict.ReplaceKey("oldKey", "newKey")
          MsgBox(myDict.Item("newKey")) ' Prints "100"
       
warning

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