ScriptForge.Dictionary zerbitzua

Hiztegi bat gako-elementu bikoteen bilduma bat da

Gakoak eta elementuak atzitu, zenbatu eta eguneratu daitezke, eta beste hainbat ekintza gauzatu daitezke haiekin.

Iradokizun-ikonoa

Dictionary zerbitzua LibreOffice Basic lengoaiak integratuta duen Collection objektuaren antzekoa da, baina eginbide gehiago eskaintzen ditu. Adibidez, Collection objektuek ez dute onartzen gakoak atzitzea. Are gehiago, hiztegiek gaitasun gehiago dituzte gakoak ordezteko, gako zehatz bat lehendik badagoen egiaztatzen baitute eta Dictionary elementua Array objektu edo JSON kate bihurtzen baitute.


Zerbitzuari deitzea

Basic lengoaian

Hurrengo adibideak myDict izeneko hiztegi hutsa sortzen du.


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

Gomendagarria da baliabideak askatzea haiek erabili ondoren:


     Set myDict = myDict.Dispose()
  
Python lengoaian

Beheko adibideak Dictionary zerbitzu baten instantzia huts bat sortzen du eta Pythonen jatorrizko update metodoa erabiltzen du hura Python dict objektu bateko edukiekin betetzeko.


    dico = dict('A' = 1, 'B' = 2, 'C' = 3)
    # Hasieratu myDict hutsik dagoen dict objektu gisa
    myDict = CreateScriptService('Dictionary')
    # dico aldagaiko balioak myDict hiztegian kargatzen ditu
    myDict.update(dico)
    myDict['D'] = 4
    print(myDict)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
    propval = myDict.ConvertToPropertyValues()
  

Posible da Dictionary zerbitzuaren instantzia bat Pythonen dict objektua argumentu gisa erabilita sortzea, hurrengo adibidean ikus daitekeen moduan.


    dico = dict('A' = 1, 'B' = 2, 'C' = 3)
    # Hasieratu myDict hiztegia dico aldagaiaren edukia erabilita
    myDict = CreateScriptService('Dictionary', dico)
    myDict['D'] = 4
    print(myDict) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
    propval = myDict.ConvertToPropertyValues()
  
note

Python lengoaiak hiztegien euskarri integratua duenez, Dictionary zerbitzuko metodoetako asko Basic scriptetan soilik erabili daitezke. Salbuespen dira ConvertToPropertyValues eta ImportFromPropertyValues, bi lengoaietan onartzen baitira.


Propietateak

Izena

Irakurtzeko soilik

Mota

Deskribapena

Count

Bai

Long

Hiztegiaren sarrera kopurua

Items

Bai

Aldagaien matrizea

Elementu kopurua dimentsio bakarreko matrize gisa

Keys

Bai

Kate-matrizea

Gakoen zerrenda dimentsio bakarreko matrize gisa


Iradokizun-ikonoa

Keys eta Items propietateek bakoitzak bere edukiak itzultzen dituzte, ordena berdina erabilita. Ordenak ez du zerikusirik sorrera-sekuentziarekin.


Adibidea:

Hurrengo adibideak Keys propietatea darabil myDict hiztegiko gako guztietan iteratzeko.


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

Metodoak

Add
ConvertToArray
ConvertToJson
ConvertToPropertyValues

Exists
ImportFromJson
ImportFromPropertyValues
Item

Remove
RemoveAll
ReplaceItem
ReplaceKey


Add

Gako-elementu bikote berria gehitzen dio hiztegiari. True itzultzen du eragiketa ongi gauzatzen bada.

Sintaxia:

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

Parametroak:

key : Elementua identifikatzeko erabiliko den kate-balioa. Ez ditu maiuskulak eta minuskulak bereizten.

item : Edozein balio: matrize bat, Basic objektu bat, UNO objektu bat, hiztegi bat...

Adibidea:


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

Gako bakoitzak bakarra izan behar du hiztegi berean. Gakoa lehendik badago hiztegian, DUPLICATEKEYERROR errore bat sortuko da. Zuriuneekin egindako gakoek INVALIDKEYERROR errorea sortuko dute.


ConvertToArray

Hiztegiaren edukiak zeron oinarritutako bi zutabeko matrize baten biltegiratzen ditu. Gakoak lehen zutabean biltegiratuko dira eta elementuak bigarren zutabean.

Hiztegia hutsik badago, metodo honek hutsik dagoen Array bat itzuliko du.

Sintaxia:

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

Adibidea:


      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

Hiztegi bateko edukiak JSON (JavaScript Object Notation) testu bihurtzen ditu.

Mugak

Metodo honek honako datu motak onartzen ditu: String, Boolean, zenbakiak, Null eta Empty. Mota horretako elementuak dituzten matrizeak ere onartzen dira, berdin dio haien dimentsioak zein diren. Datak kate bihurtzen dira, baina ezin dira matrizeen barruan erabili. Beste datu motak kate modura duten ordezkapenera bihurtzen dira, SF_String.Represent zerbitzuaren bidez.

Sintaxia:

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

Parametroak:

indent: indent zenbaki positiboa edo testua denean, JSON matrize-elementuak eta objektu-kideak ondo inprimatzen dira koskatze-maila horrekin. indent balioa negatiboa bada, koskarik gabeko lerro berriak erantsiko dira. Balio lehenetsia kate huts bat da, "" alegia, adierazpen trinkoena hautatzen duena. Osoko zenbaki positiboa erabiltzen bada indent parametroan, zenbaki horrek adierazten duen espazio kopurua koskatuko da testua maila bakoitzeko. indent kate bat bada, adibidez Chr(9) edo Tab(1), tabulazioaren karakterea erabiliko da maila bakoitza koskatzeko.

Adibidea:


      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

Gorde hiztegiaren edukiak PropertyValues elementuen matrize batean.

Matrizeko sarrera bakoitza com.sun.star.beans.PropertyValue bat da. Gakoa Name aldean biltegiratzen da, eta elementua Value aldean.

Elementuren bat Date motakoa bada, com.sun.star.util.DateTime egitura bihurtuko da. Elementuren bat matrize huts bat bada, Null bihurtuko da. Emaitza gisa sortutako matrizea hutsik egongo da hiztegia hutsik badago.

Sintaxia:

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

Adibidea:

Basic lengoaian

    Dim myDict as Variant
    myDict = CreateScriptService("Dictionary")
    'Zenbait propietate gehitzen dizkio hiztegiari
    myDict.Add("Color", "Blue")
    myDict.Add("Width", 20)
    'PropertyValue objektuen matrize bihurtzen du
    Dim prop as Variant
    prop = myDict.ConvertToPropertyValues()
  
Python lengoaian

Ikusi nola, beheko adibidean, Python hiztegi bat pasatu behar den CreateScriptService metodoaren bigarren argumentu gisa.


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

UNO liburutegiaren zerbitzu eta metodo askok LibreOffice APIaren barruan dagoen PropertyValue struct-aren bidez adierazitako parametroak hartzen dituzte.


Exists

Gako bat hiztegian badagoen ala ez zehazten du.

Sintaxia:

dict.Exists(key: str): bool

Parametroak:

key: Hiztegian dagoen ala ez begiratuko den gakoa.

Adibidea:


    Dim myDict as Variant
    myDict = CreateScriptService("Dictionary")
    'Zenbait propietate gehitzen dizkio hiztegiari
    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) kate bateko edukia uneko hiztegiari gehitzen dio. True itzultzen du ongi gauzatzen bada.

Mugak

JSON kateak eduki ditzake zenbakiak, testua, boolearrak, balio nuluak eta mota horiek dituzten matrizeak. Ez ditu eduki behar azpihiztegi deituriko JSON objektuak.

Testua data bihurtzeko saiakera egiten da elementuak honako ereduetako bat badu: UUUU-HH-EE, OO:MM:SS edo UUUU-HH-EE OO:MM:SS.

Sintaxia:

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

Parametroak:

inputstr: Inportatuko den katea.

overwrite: True bada, izen bera duten sarrerak egon daitezke hiztegian eta haien balioak gainidatzi egingo dira. False (lehenetsia) bada, gako errepikatuek errore bat sortuko dute. Kontuan izan hiztegiko gakoek ez dituztela maiuskulak/minuskulak bereizten, baina JSON kateetako izenek bai.

Adibidea:


    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" eta "phoneNumbers" (0) eta (1) azpi-hiztegiak balio huts gisa inportatuko dira.
  

ImportFromPropertyValues

PropertyValue objektuen matrize baten balioak uneko hiztegian txertatzen ditu. PropertyValue izenak gako modura erabiltzen dira hiztegian, eta balioak balio gisa. True itzultzen du eragiketa ongi gauzatu bada.

Sintaxia:

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

Parametroak:

propertyvalues: Zeron oinarritutako dimentsio bakarreko matrize bat, com.sun.star.beans.PropertyValue objektuak dituena. Parametro hau matrize batean ez dagoen PropertyValue objektu bat ere izan daiteke.

overwrite: Parametro hau True bada, izen bereko sarrerak egon daitezke hiztegian, eta haien balioak gainidatzi egingo dira. False (balio lehenetsia) bada, gako errepikatuek errore bat sortuko dute. Kontuan izan hiztegiko gakoetarako ez direla maiuskulak/minuskulak bereizten Basic lengoaian, baina propietate-balioen multzoetako izenetan eta Python lengoaian bai.

Adibidea:

Beheko adibideak lehenengo matrize bat sortzen du bi PropertyValue objektu erabiliz, eta ondoren hiztegi bihurtzen du.

Basic lengoaian

    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
  
Python lengoaian

    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

Hiztegi batean dagoen sarrera bat atzitzen du, bere gakoa erabilita. Elementuaren balioa itzultzen du eragiketa ongi gauzatu bada, bestela Empty itzultzen du.

Sintaxia:

dict.Item(key: str): any

Parametroak:

key: Ez ditu maiuskulak/minuskulak bereizten. Ez badago, Empty balioa itzuliko da.

Adibidea:

Hurrengo adibidean, hiztegiko gako guztien iterazio bat egiten da eta Item metodoa erabiltzen da beren balioak atzitzeko.


    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

Hiztegiko sarrera bat kentzen du bere gakoan oinarrituta. True itzultzen du eragiketa ongi gauzatzen bada.

Sintaxia:

dict.Remove(key: str): bool

Parametroak:

key: Ez ditu maiuskulak/minuskulak bereizten. Hiztegian egon behar du, bestela UNKNOWNKEYERROR errorea sortuko da.

Adibidea:


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

RemoveAll

Hiztegiko sarrera guztiak kentzen ditu. True (egia) itzultzen du ongi gauzatzen bada.

Sintaxia:

dict.RemoveAll(): bool

Adibidea:


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

ReplaceItem

Elementu-balio bat ordezten du bere gakoan oinarrituta. True (egia) itzultzen du ongi gauzatzen bada.

Sintaxia:

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

Parametroak:

key: Ordeztuko den balioaren gakoa adierazten duen kate-balioa. Ez ditu maiuskulak/minuskulak bereizten. Gakoa hiztegian ez badago, UNKNOWNKEYERROR errorea sortuko da.

value: key parametroak erreferentzia egiten dion elementuaren balio berria.

Adibidea:


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

ReplaceKey

Hiztegiko gako bat beste gako batekin ordezten du. Elementuaren balioa ez da aldatuko. True itzultzen du eragiteka ongi gauzatzen bada.

Sintaxia:

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

Parametroak:

key: Ordeztuko den gakoa adierazten duen kate-balioa. Ez ditu maiuskulak/minuskulak bereizten. Gakoa hiztegian ez badago, UNKNOWNKEYERROR errorea sortuko da.

value: Gako berrirako kate-balioa. Ez ditu maiuskulak/minuskulak bereizten. Gako berria lehendik badago hiztegian, DUPLICATEKEYERROR errorea sortuko da.

Adibidea:


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

Azpimarraren karaktere bat, "_", aurrizki gisa duten ScriptForge Basic errutina edo identifikatzaile guztiak barneko erabilerarako erreserbatuta daude. Ez dira Basic makroetan edo Python scriptetan erabili behar.


Emaguzu laguntza!