ScriptForge . Diksyunaryo serbisyo

Ang diksyunaryo ay isang koleksyon ng mga pares ng key-item

Maaaring makuha, mabilang, ma-update, at marami pang iba ang mga susi at item.

Icon ng Tip

Ang serbisyo ng Dictionary ay katulad ng built-in na LibreOffice Basic Koleksyon bagay, gayunpaman may higit pang mga tampok. Halimbawa, Koleksyon hindi sinusuportahan ng mga bagay ang pagkuha ng mga susi. Bukod dito, ang Mga Diksyunaryo ay nagbibigay ng mga karagdagang kakayahan bilang pagpapalit ng mga susi, pagsubok kung mayroon nang partikular na key at pag-convert ng Diksyunaryo sa Array object o JSON string.


Panawagan sa serbisyo

Sa Basic

Lumilikha ang sumusunod na halimbawa myDict bilang isang walang laman na diksyunaryo.


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

Inirerekomenda na magbakante ng mga mapagkukunan pagkatapos gamitin:


     Set myDict = myDict.Dispose()
  
Sa Python

Ang halimbawa sa ibaba ay lumilikha ng isang walang laman na instance ng Diksyunaryo serbisyo at gumagamit ng Python native update paraan upang punan ito ng mga nilalaman ng isang Python dict bagay.


    dico = dict('A' = 1, 'B' = 2, 'C' = 3)
    # I-initialize ang myDict bilang isang walang laman na dict object
    myDict = CreateScriptService('Dictionary')
    # I-load ang mga halaga ng dico sa myDict
    myDict.update(dico)
    myDict['D'] = 4
    print(myDict)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
    propval = myDict.ConvertToPropertyValues()
  

Posibleng lumikha ng isang instance ng Diksyunaryo serbisyo gamit ang isang Python dict object bilang argumento tulad ng ipinapakita sa sumusunod na halimbawa.


    dico = dict('A' = 1, 'B' = 2, 'C' = 3)
    # Simulan ang myDict sa nilalaman ng dico
    myDict = CreateScriptService('Dictionary', dico)
    myDict['D'] = 4
    print(myDict) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
    propval = myDict.ConvertToPropertyValues()
  
note

Dahil ang Python ay may built-in na suporta sa diksyunaryo, karamihan sa mga pamamaraan sa Diksyunaryo ang serbisyo ay magagamit lamang para sa mga Pangunahing script. Ang mga pagbubukod ay ConvertToPropertyValues at ImportFromPropertyValues na sinusuportahan sa parehong Basic at Python.


Mga Katangian

Pangalan

Read-only

Type

Mga nilalaman

Count

Mayroon

Long

Ang bilang ng mga entry sa diksyunaryo

Items

Mayroon

Array ng mga Variant

Ang listahan ng mga item bilang isang isang dimensional na array

Keys

Mayroon

Array ng Strings

Ang listahan ng mga key bilang isang isang dimensional na array


Icon ng Tip

Ang Mga susi at Mga bagay ibinabalik ng mga ari-arian ang kani-kanilang nilalaman, gamit ang magkaparehong pagkakasunud-sunod. Ang pagkakasunud-sunod ay walang kaugnayan sa pagkakasunud-sunod ng paglikha.


Halimbawa:

Ang sumusunod na halimbawa ay gumagamit ng Mga susi ari-arian upang umulit sa lahat ng mga susi sa diksyunaryo myDict .


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

Listahan ng Mga Paraan sa Serbisyo ng Diksyunaryo

Add
ConvertToArray
ConvertToJson
ConvertToPropertyValues

Exists
ImportFromJson
ImportFromPropertyValues
Item

Remove
RemoveAll
ReplaceItem
ReplaceKey


Add

Nagdaragdag ng bagong key-item na pares sa diksyunaryo. Nagbabalik totoo kung matagumpay.

Syntax:

dict.Add(key: str, item: any): bool

Mga Parameter:

susi : String value na ginamit para matukoy ang Item. Ang susi ay hindi case-sensitive.

aytem : Anumang value, kabilang ang isang array, isang Basic object, isang UNO object, isang diksyunaryo, atbp.

Halimbawa:


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

Ang bawat susi ay dapat na natatangi sa parehong diksyunaryo. Kung ang susi ay mayroon na sa diksyunaryo, a DUPLICATEKEYERROR itataas. Ang mga susi na gawa sa mga space character ay magpapalaki ng a INVALIDKEYERROR pagkakamali.


ConvertToArray

Iniimbak ang mga nilalaman ng diksyunaryo sa isang dalawang-column na zero-based na array. Ang mga susi ay naka-imbak sa unang column at ang mga item ay naka-imbak sa pangalawang column.

Kung walang laman ang diksyunaryo, magbabalik ang paraang ito ng walang laman Array .

Syntax:

dict.ConvertToArray(): any[0..*, 0..1]

Halimbawa:


      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

Kino-convert ang mga nilalaman ng isang diksyunaryo sa JSON (JavaScript Object Notation) text.

Mga Limitasyon

Sinusuportahan ng pamamaraang ito ang mga sumusunod na uri ng data: String , Boolean , mga numero, Null at Walang laman . Ang mga array na naglalaman ng mga item ng mga ganitong uri ay pinapayagan din, anuman ang kanilang mga sukat. Ang mga petsa ay na-convert sa mga string, gayunpaman hindi sila magagamit sa loob ng Arrays. Ang iba pang mga uri ng data ay kino-convert sa kanilang representasyon ng string gamit ang SF_String.Represent serbisyo.

Syntax:

dict.ConvertToJson(indent: str = ""): str

Mga Parameter:

indent : Kailan indent ay isang positibong numero o isang text, ang mga elemento ng array ng JSON at mga miyembro ng object ay medyo naka-print sa antas ng indentation na iyon. Isang negatibo indent ang value ay magdaragdag ng mga bagong linya na walang indentation. Ang default na value ay isang walang laman na string na "" na pumipili ng pinaka-compact na representasyon. Paggamit ng positive integer para sa indent indent na maraming puwang sa bawat antas. kailan indent ay isang string, tulad ng Chr(9) o Tab(1) , ang Tab na character ay ginagamit upang i-indent ang bawat antas.

Halimbawa:


      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

Iniimbak ang mga nilalaman ng diksyunaryo sa isang hanay ng PropertyValues .

Ang bawat entry sa array ay a com.sun.star.beans.PropertyValue . Ang susi ay naka-imbak sa Pangalan , ang item ay nakaimbak sa Halaga .

Kung ang isa sa mga bagay ay may uri Petsa , ito ay kino-convert sa a com.sun.star.util.DateTime istraktura. Kung ang isa sa mga item ay isang walang laman na array, ito ay mako-convert sa Null . Ang resultang array ay walang laman kapag ang diksyunaryo ay walang laman.

Syntax:

dict.ConvertToPropertyValues(): obj[0..*]

Halimbawa:

Sa Basic

    Dim myDict as Variant
    myDict = CreateScriptService("Dictionary")
    'Nagdaragdag ng ilang katangian sa diksyunaryo
    myDict.Add("Color", "Blue")
    myDict.Add("Width", 20)
    'Nagko-convert sa isang Array ng mga bagay na PropertyValue
    Dim prop as Variant
    prop = myDict.ConvertToPropertyValues()
  
Sa Python

Tandaan sa halimbawa sa ibaba na ang isang Python na diksyunaryo ay kailangang maipasa bilang pangalawang argumento ng CreateScriptService paraan.


    myDict = dict()
    myDict["Color"] = "Blue"
    myDict["Width"] = 30
    sfDic = CreateScriptService("Dictionary", myDict)
    prop = sfDic.ConvertToPropertyValues()
  
tip

Maraming mga serbisyo at pamamaraan sa library ng UNO ang kumukuha ng mga parameter na kinakatawan gamit ang PropertyValue struct, na bahagi ng LibreOffice API.


Exists

Tinutukoy kung mayroong susi sa diksyunaryo.

Syntax:

dict.Exists(key: str): bool

Mga Parameter:

susi : Ang susi na hahanapin sa diksyunaryo.

Halimbawa:


    Dim myDict as Variant
    myDict = CreateScriptService("Dictionary")
    'Nagdaragdag ng ilang katangian sa diksyunaryo
    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

Nagdaragdag ng nilalaman ng a JSON (JavaScript Object Notation) string sa kasalukuyang diksyunaryo. Nagbabalik totoo kung matagumpay.

Mga Limitasyon

Ang string ng JSON ay maaaring maglaman ng mga numero, text, boolean, null value at array na naglalaman ng mga uri na iyon. Hindi ito dapat maglaman ng mga object ng JSON katulad ng mga sub-dictionaries.

Sinusubukang i-convert ang text sa petsa kung tumutugma ang item sa isa sa mga pattern na ito: YYYY-MM-DD, HH:MM:SS o YYYY-MM-DD HH:MM:SS.

Syntax:

dict.ImportFromJson(inputstr: str, overwrite: bool = False): bool

Mga Parameter:

inputstr : Ang string na ii-import.

overwrite : Kailan totoo , ang mga entry na may parehong pangalan ay maaaring umiiral sa diksyunaryo at ang kanilang mga halaga ay na-overwrite. kailan Mali (default), ang mga paulit-ulit na key ay magpapalaki ng error. Magkaroon ng kamalayan na ang mga key ng diksyunaryo ay hindi case-sensitive habang ang mga pangalan ay case-sensitive sa mga string ng JSON.

Halimbawa:


    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)
    'Ang (sub)-dictionaries na "address" at "phoneNumbers" (0) at (1) ay ini-import bilang Empty values.
  

ImportFromPropertyValues

Ipinapasok ang mga nilalaman ng isang array ng PropertyValue mga bagay sa kasalukuyang diksyunaryo. PropertyValue Ang mga pangalan ay ginagamit bilang Mga Susi sa diksyunaryo, samantalang ang Mga Halaga ay naglalaman ng mga katumbas na halaga. Nagbabalik totoo kung matagumpay.

Syntax:

dict.ImportFromPropertyValues(propertyvalues: obj[0..*], overwrite: bool = False): bool

Mga Parameter:

mga halaga ng ari-arian : Isang zero-based na 1-dimensional na array na naglalaman com.sun.star.beans.PropertyValue mga bagay. Ang parameter na ito ay maaari ding iisa PropertyValue bagay na hindi nakapaloob sa isang Array.

overwrite : Kailan totoo , ang mga entry na may parehong pangalan ay maaaring umiiral sa diksyunaryo at ang kanilang mga halaga ay na-overwrite. kailan Mali (default), ang mga paulit-ulit na key ay magpapalaki ng error. Tandaan na ang mga key ng diksyunaryo ay hindi case-sensitive sa Basic, samantalang ang mga pangalan ay case-sensitive sa mga hanay ng mga value ng property at sa mga diksyunaryo ng Python.

Halimbawa:

Ang mga halimbawa sa ibaba ay unang lumikha ng isang array na may dalawa PropertyValue mga bagay at pagkatapos ay i-convert ito sa isang diksyunaryo.

Sa Basic

    Dim vProp As New com.sun.star.beans.PropertyValue
    Dim arrProp : arrProp = Array()
    vProp.Name = "Color"
    vProp.Value = "Blue"
    arrProp = SF_Array.Append(arrProp, vProp)
    vProp.Name = "Date"
    vProp.Value = CDateToUnoDateTime(Now)
    arrProp = SF_Array.Append(arrProp, vProp)
    myDict = CreateScriptService("Dictionary")
    myDict.ImportFromPropertyValues(arrProp, Overwrite := True)
    Dim keys : keys = myDict.Keys
    For Each k In keys
        MsgBox k & " - " & myDict.Item(k)
    Next k
  
Sa Python

    from scriptforge import CreateScriptService
    from datetime import datetime
    import uno
    bas = CreateScriptService("Basic")
    arrProp = list()
    vProp = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
    vProp.Name = "Color"
    vProp.Value = "Blue"
    arrProp.append(vProp)
    vProp = uno.createUnoStruct("com.sun.star.beans.PropertyValue")
    vProp.Name = "Date"
    vProp.Value = bas.CDateToUnoDateTime(datetime.now())
    arrProp.append(vProp)
    myDict = CreateScriptService("Dictionary")
    myDict.ImportFromPropertyValues(arrProp, overwrite=True)
    for k in myDict.keys():
        bas.MsgBox("{} - {}".format(k, myDict[k]))
  

Item

Kinukuha ang isang umiiral na entry sa diksyunaryo batay sa susi nito. Ibinabalik ang halaga ng item kung matagumpay, kung hindi ay babalik Walang laman .

Syntax:

dict.Item(key: str): any

Mga Parameter:

susi : Hindi case-sensitive. Kung wala ito, Walang laman ibinalik ang halaga.

Halimbawa:

Ang sumusunod na halimbawa ay umuulit sa lahat ng mga key sa diksyunaryo at ginagamit ang item paraan upang ma-access ang kanilang mga halaga.


    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

Inaalis ang isang umiiral nang entry sa diksyunaryo batay sa susi nito. Nagbabalik totoo kung matagumpay.

Syntax:

dict.Remove(key: str): bool

Mga Parameter:

susi : Hindi case-sensitive. Dapat na umiiral sa diksyunaryo, kung hindi an UNKNOWNKEYERROR nakataas ang error.

Halimbawa:


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

RemoveAll

Tinatanggal ang lahat ng mga entry mula sa diksyunaryo. Nagbabalik totoo kung matagumpay.

Syntax:

dict.RemoveAll(): bool

Halimbawa:


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

ReplaceItem

Pinapalitan ang isang umiiral na halaga ng item batay sa susi nito. Nagbabalik totoo kung matagumpay.

Syntax:

dict.ReplaceItem(key: str, value: any): bool

Mga Parameter:

susi : String value na kumakatawan sa key na ang value ay papalitan. Hindi case-sensitive. Kung ang susi ay wala sa diksyunaryo, an UNKNOWNKEYERROR nakataas ang error.

halaga : Ang bagong halaga ng item na tinutukoy sa susi parameter.

Halimbawa:


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

ReplaceKey

Pinapalitan ang isang umiiral na key sa diksyunaryo ng isang bagong key. Ang halaga ng item ay hindi nababago. Nagbabalik totoo kung matagumpay.

Syntax:

dict.ReplaceKey(key: str, value: str): bool

Mga Parameter:

susi : String value na kumakatawan sa susi na papalitan. Hindi case-sensitive. Kung ang susi ay wala sa diksyunaryo, a UNKNOWNKEYERROR nakataas ang error.

halaga : String value para sa bagong key. Hindi case-sensitive. Kung mayroon nang bagong key sa diksyunaryo, an DUPLICATEKEYERROR nakataas ang error.

Halimbawa:


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

Lahat ScriptForge Ang mga pangunahing gawain o identifier na may prefix na may underscore na character na "_" ay nakalaan para sa panloob na paggamit. Ang mga ito ay hindi nilalayong gamitin sa Basic macros o Python script.


Mangyaring suportahan kami!