Edukiak
Indizea 🔎︎

# ScriptForge.Dictionary zerbitzua

Hiztegi bat gako-elementu bikoteen bilduma bat da

- Gakoa maiuskulukak/minuskulak kontuan hartzen ez dituen kate bat da

- Elementuak edozein motatakoak izan daitezke

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

LibreOffice Basic Collection objektuak ez du onartzen gakoak atzitzea.
Gainera, bere elementuek jatorrizko Basic datu motak soilik dituzte: datak, testua, zenbakiak eta antzekoak.

## Zerbitzuari deitzea

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()

## 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

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:

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

### 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)

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:

              myDict.ConvertToArray() As Variant

### 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:

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

### Parametroak:

Indent: Indent zenbaki positibo bat edo testu bat bada, JSON matrizeetako elementuak eta objektu kideak koskatze-maila batekin inprimatuko dira. Indent balioa negatiboa bada, lerro berriak koskatzerik gabe gehituko dira. Indent "" balio lehenetsiak irudikapen trinkoena hautatuko du. Osoko zenbaki positiboa erabiltzen bada Indent parametroak, koskatzeak horrenbestekoak izango dira maila bakoitzeko. Indent kate bat bada, adibidez Chr(9) edo Tab(1), Tab 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 edukia 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:

              myDict.ConvertToPropertyValues() As Variant

### Adibidea:

              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()

UNO liburutegiko zerbitzu eta metodo askok PropertyValue egitura erabilita adierazten diren parametroak dituzte. Egitura hori LibreOffice APIkoa da.

## Exists

Gako bat hiztegian badagoen ala ez zehazten du.

### Sintaxia:

              myDict.Exists(Key As String) As Boolean

### Parametroak:

Gakoa: 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:

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

### 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:

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

### Parametroak:

PropertyValues: Dimentsio bateko eta zero oinarriko matrize bat, com.sun.star.beans.PropertyValue objektuak dituena. Parametro hau matrize batean ez dagoen PropertyValue objektu bakarra 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 gakoek ez dituztela maiiuskulak/minuskulak bereiztean, baina propietate-balioen multzoetako izenek bai.

### Adibidea:

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

## Item

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

### Sintaxia:

              myDict.Item(Key As String) As Variant

### Parametroak:

Key: Ez ditu maiuskulak/minuskulak bereizten. Hiztegian egon behar da, bestela UNKNOWNKEYERROR errorea sortuko 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:

              myDict.Remove(Key As String) As Boolean

### Parametroak:

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

### Adibidea:

              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

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

### Sintaxia:

              myDict.RemoveAll() As Boolean

### Adibidea:

              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

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

### Sintaxia:

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

### Parametroak:

Key: Ordeztuko 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")) 'Prints "1"
              myDict.ReplaceItem("a", 100)
              MsgBox(myDict.Item("a")) ' Prints "100"

## ReplaceKey

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

### Sintaxia:

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

### 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")) 'Prints "100"
              myDict.ReplaceKey("oldKey", "newKey")
              MsgBox(myDict.Item("newKey")) ' Prints "100"

Aurrizki gisa azpimarra bat ("_") duten ScriptForge Basic errutina edo identifikatzaile guztiak barneko erabilerarako erreserbatuta daude. Ez daude Basic makroetan erabiltzeko pentsatuta.