Indhold
Indholdsfortegnelse 🔎︎

# Tjenesten ScriptForge.Ordbog

En ordbog er samling af nøgle-element-par

- Nøglen er en streng, der ikke skelner mellem Store og små bogstaver

- Elementer kan være af enhver type

Nøgler og elementer kan hentes, tælles, opdateres og meget mere.

LibreOffice Basic Collection-objektet understøtter ikke hentning af nøglerne.
Derudover indeholder dets elementer kun primitive Basic-datatyper som for eksempel datoer, tekst, tal og deslige.

## Kald af tjeneste

Det følgende eksempel opretter myDict som en tom ordbog.

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

Det anbefales at frigøre ressourcer efter brug:

         Set myDict = myDict.Dispose()

## Egenskaber

Navn | Skrivebeskyttet | Type | Beskrivelse
Count | Ja | Long | Antallet af indførsler i ordbogen
Items | Ja | Matrix af varianter | Listen over elementer som en en-dimensinel matrix
Keys | Ja | Matrix af strenge | Listen over nøgler som en en-dimensionel matrix

Egenskaberne Keys og Items returnerer deres respektive indhold, i en identisk rækkefølge. Rækkefølgen er ikke relateret til oprettelsesrækkefølgen.

### Eksempel:

Det følgende eksempel bruger egenskaben Keys til flere gange at gennemgå alle nøglerne i myDict.

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

| Metoder |
Add ConvertToArray ConvertToJson ConvertToPropertyValues | Exists ImportFromJson ImportFromPropertyValues Item | Remove RemoveAll ReplaceItem ReplaceKey

## Add

Tilføjer et nyt nøgle-element-par til ordbogen. Returnerer True, hvis det lykkes.

### Syntaks:

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

### Parametre:

Nøgle: Strengværdi, der bruges til at identificere elementet. Nøglen skelner ikke mellem Store og små bogstaver.

Element: Enhver værdi, herunder en matrix, et Basic-objekt, et UNO-objekt, en ordbog og så videre.

### Eksempel:

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

Hver nøgle i den samme ordbog skal være unik. Hvis, nøglen allerede eksisterer i ordbogen, sættes der et , DUPLICATEKEYERROR-flag. Nøgler, der udgøres af mellemrumstegn, sætter et INVALIDKEYERROR-flag.

## ConvertToArray

Gemmer indholder ordbogens indhold i en to-kolonners, nul-baseret matrix.Nøglerne er gemt i den første kolonne og elementerne gemmes i den anden kolonne.

Hvis ordbogen er tom, returnerer denne metode en tom Array (matrix).

### Syntaks:

              myDict.ConvertToArray() As Variant

### Eksempel:

            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

Konverterer ordbogens indhold til tekst i JSON (JavaScript Object Notation).

### Begrænsninger

Denne metode understøtter følgende datatyper: String, Boolean, numbers, Null and Empty. Matrixer, der indeholder elementer af disse er også tilladt, uanset deres dimensioner. Datoer er konverteret til strenge, der bruges inden for matrixerne. Andre datatyper konverteres til deres repræsentation til strenge ved hjælp af tjenesten SF_String.Represent.

### Syntaks:

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

### Parametre:

Indrykning : Når Indent er et positivt tal eller en tekst, skønskrives JSON-matrixelementer og objektled med det indrykningsniveau. En negativ Indent værdi vil tilføje nye linjer uden indrykning. Standardværdien Indent "" vælger den mest kompakte repræsentation. Brug af et positivt heltal i Indent indrykker det antal mellemrum på niveauet. Når Indent er en stregn, som for eksempel Chr(9) eller Tab(1), bruges tabulatortegnet til at indrykke hvert niveau.

### Eksempel:

                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

Gem ordbogens indhold i et matrix af PropertyValues.

Hver indførsel er en com.sun.star.beans.PropertyValue. Nøglen gemmes i Name, elementet i Value.

Hvis et af elementerne har en type, Dato, konverteres den til strukturen com.sun.star.util.DateTime. Hvis et af elementerne er en tomt matrix, konverteres det til Null. Den resulterende matrix er tom, når ordbogen er tom.

### Syntaks:

              myDict.ConvertToPropertyValues() As Variant

### Eksempel:

              Dim myDict as Variant
              myDict = CreateScriptService("Dictionary")
              'Tilføjer nogle egenskaber til ordbogen
              myDict.Add("Color", "Blue")
              myDict.Add("Width", 20)
              'Konverterer til en matrix af objekterne PropertyValue
              Dim prop as Variant
              prop = myDict.ConvertToPropertyValues()

Mange tjenester og metoder i UNO-bibliotek tager parametere ind, som er repræsenteret med strukturen PropertyValue, som er en del af LibreOffice APIen.

## Exists

Bestemmer, om der eksisterer en nøgle i ordbogen.

### Syntaks:

              myDict.Exists(Key As String) As Boolean

### Parametre:

Nøgle : Den nøgle, der skal slås op i ordbogen.

### Eksempel:

              Dim myDict as Variant
              myDict = CreateScriptService("Dictionary")
              'Tilføjer nogle egenskaber til ordbogen
              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

Tilføjer indholdet af en streng i JSON (JavaScript Object Notation) til den aktuelle ordbog. Returnerer True, hvis det lykkes.

### Begrænsninger

JSON-strengen kan indeholde tal, tekst, boolske værdier, null-værdier og matrixer, der indeholder disse typer. Den må ikke indeholde JSON-objekter, især ikke undermapper.

Der gøres et forsøg på at konvertere tekst til dato, hvis elementet matcher et af disse mønstre: YYYY-MM-DD, HH:MM:SS eller YYYY-MM-DD HH:MM:SS.

### Syntaks:

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

### Parametre:

InputStr: Den streng, der skal importeres.

Oveskriv : Når True, kan der findes indførsler med det samme navn i ordbogen og deres værdier overskrives. Når False (standard), sætter gentagne nøgler et fejlflag. Husk, at ordbogsnøgler ikke skelner mellem Store og små bogstaver, mens navne i JSON-strenge gør.

### Eksempel:

                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)
                '(Del)-ordbøgerne "Addresse" and "Telefonnumre" (0) og (1)importeres som tomme værdier..

## ImportFromPropertyValues

Indsætter indholdet af en matrix af PropertyValue-objekterne ind i den aktuelle ordbog. Navne under PropertyValue bruges som nøgler i ordbogen, hvorimod Værdier indeholder de tilsvarende værdier. Returnerer True, hvis det lykkes.

### Syntaks:

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

### Parametre:

EgenskabsVærdier : En nul-baseret en,dimensionel matrix, der indeholder com.sun.star.beans.PropertyValue-objekter. Denne parameter kan også være et PropertyValue-objekt, der ikke er indeholdt i en matrix.

Overskriv : Når True, kan der eksistere indførsler med det samme navn i ordbogen og deres værdier overskrives. Når False (standard), sætter gentagne nøgler et fejlflag. Bemærk, at ordbogsnøgler ikke skelner mellem Store og små bogstaver, mens navne skelner mellem Store og små bogstaver i sæt af egenskabsværdier.

### Eksempel:

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

## Item

Henter en eksisterende ordbogsindførsel baseret på dens nøgle. Returnerer elementets værdi, hvis det lykkes, ellers returneres Empty.

### Syntaks:

              myDict.Item(Key As String) As Variant

### Parametre:

Nøgle: Skelner ikke mellem Store og små bogstaver. Skal findes i ordbogen, ellers sættes et UNKNOWNKEYERROR-flag.

### Eksempel:

Det følgende eksempel gennemgår alle nøgler i ordbogen flere gange og bruger metoden Item til at tilgå deres værdier.

              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

Fjerner en eksisterende ordbogsindførsel baseret på dets nøgle. Returnerer True, hvis det lykkes.

### Syntaks:

              myDict.Remove(Key As String) As Boolean

### Parametre:

Nøgle : Skelner mellem Store og små bogstaver. Skal findes i ordbogen, ellers sættes et UNKNOWNKEYERROR-flag.

### Eksempel:

              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

Fjerner alle indførsler fra ordbogen. Returnerer True, hvis det lykkes.

### Syntaks:

              myDict.RemoveAll() As Boolean

### Eksempel:

              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

Erstatter en eksisterende elementværdi baseret på dens nøgle. Returnerer True,hvis det lykkes.

### Syntaks:

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

### Parametre:

Nøgle: Strengværdi, der repræsenterer den nøgle, hvis værdi skal erstattes. Skelner ikke mellem Store og små bogstaver. Hvis nøglen ikke eksisterer i ordbogen, sættes et UNKNOWNKEYERROR-flag.

Value (Værdi): Den nye værdi af det element, der refereres til med parameteren Key (Nøgle).

### Eksempel:

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

## ReplaceKey

Erstatter en eksisterende nøgle i ordbogen med en ny nøgle. Elementværdien efterlades uændret. Returnerer True, hvis det lykkes.

### Syntaks:

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

### Parametre:

Key (Nøgle): Strengværdi, der repræsenterer den nøgle, der skal erstattes. Skelner ikke mellem Store og små bogstaver. Hvis nøglen ikke findes i ordbogen, sættes et UNKNOWNKEYERROR-flag.

Value (værdi): Den nye nøgles strengværdi. Skelner ikke mellem Store og små bogstaver. Hvis den nye nøgle allerede findes i ordbogen, sættes der et DUPLICATEKEYERROR-flag.

### Eksempel:

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

Alle ScriptForge Basic-rutiner eller identifikatorer, som indledes med et understregningstegn "_" er reserveret til internt brug. De er ikke beregnet til brug i Basic-makroer.