ScriptForge.Ordbok tjeneste

En ordbok er en samling av nøkkelelementpar

Nøkler og gjenstander kan hentes, telles, oppdateres og mye mer.

Tipsikon

Ordbok-tjenesten ligner på det innebygde Collabora Office Basic Collection-objektet, men med flere funksjoner. For eksempel støtter ikke Collection-objekter henting av nøkler. I tillegg gir ordbøker ytterligere muligheter som å erstatte nøkler, teste om en spesifikk nøkkel allerede eksisterer og konvertere ordboken til et Array-objekt eller JSON-streng.


Tjenestepåkallelse

I Basic

Følgende eksempel oppretter myDict som en tom ordbok.

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

Det anbefales å frigjøre ressurser etter bruk:

Set myDict = myDict.Dispose()
I Python

Eksemplet nedenfor oppretter en tom forekomst av Dictionary-tjenesten og bruker Python native update-metoden for å fylle den med innholdet i et Python dict-objekt .

dico = dict('A' = 1, 'B' = 2, 'C' = 3)
# Initialiser myDict som et tomt dict-objekt
myDict = CreateScriptService('Dictionary')
# Last inn verdiene til dico i myDict
myDict.update(dico)
myDict['D'] = 4
print(myDict)   # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
propval = myDict.ConvertToPropertyValues()

Det er mulig å lage en forekomst av Dictionary-tjenesten ved å bruke et Python dict-objekt som argument som vist i følgende eksempel.

dico = dict('A' = 1, 'B' = 2, 'C' = 3)
# Initialiser myDict med innholdet i dico
myDict = CreateScriptService('Dictionary', dico)
myDict['D'] = 4
print(myDict) # {'A': 1, 'B': 2, 'C': 3, 'D': 4}
propval = myDict.ConvertToPropertyValues()
note

Fordi Python har innebygd ordbokstøtte, er de fleste metodene i Ordbok-tjenesten kun tilgjengelig for grunnleggende skript. Unntak er ConvertToPropertyValues og ImportFromPropertyValues som støttes i både Basic og Python.


Egenskaper

Navn

Skrivebeskyttet

Type

Beskrivelse

Count

Ja

Long

Antall oppføringer i ordboken

Items

Ja

En matrise med varianter

Listen over elementer som en endimensjonal matrise

Keys

Ja

En matrise med strenger

Listen over nøkler som en endimensjonal matrise


Tipsikon

Egenskapene Keys og Items returnerer sitt respektive innhold, med identisk rekkefølge. Rekkefølgen er ikke relatert til opprettelsessekvensen.


Eksempel:

Følgende eksempel bruker egenskapen Keys til å iterere over alle nøklene i ordboken myDict.

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

Liste over metoder i ordboktjenesten

Add
ConvertToArray
ConvertToJson
ConvertToPropertyValues

Exists
ImportFromJson
ImportFromPropertyValues
Item

Remove
RemoveAll
ReplaceItem
ReplaceKey


Add

Legger til et nytt nøkkelelementpar i ordboken. Returnerer True hvis vellykket.

Syntaks:

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

Parametre:

nøkkel: Strengverdi som brukes til å identifisere elementet. Nøkkelen skiller ikke mellom store og små bokstaver.

item: Enhver verdi, inkludert en matrise, et Basic-objekt, et UNO-objekt, en ordbok osv.

Eksempel:

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

Hver nøkkel må være unik i samme ordbok. Hvis nøkkelen allerede finnes i ordboken, vises en DUPLICATEKEYERROR. Taster som er laget av mellomromstegn vil gi en INVALIDKEYERROR feil.


ConvertToArray

Lagrer innholdet i ordboken i en nullbasert matrise med to kolonner. Nøklene lagres i den første kolonnen og elementene lagres i den andre kolonnen.

Hvis ordboken er tom, vil denne metoden returnere en tom Matrise.

Syntaks:

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

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 innholdet i en ordbok til JSON (JavaScript Object Notation)-tekst.

Begrensninger

Denne metoden støtter følgende datatyper: String, Boolean, tall, Null og Empty. Matriser som inneholder elementer av denne typen er også tillatt, uansett dimensjoner. Datoer konverteres til strenger, men de kan ikke brukes i Arrays. Andre datatyper konverteres til deres strengrepresentasjon ved å bruke SF_String.Represent-tjenesten.

Syntaks:

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

Parametre:

innrykk: Når innrykk er et positivt tall eller en tekst, er JSON-matriseelementer og objektmedlemmer ganske trykt med det innrykksnivået. En negativ innrykk verdi vil legge til nye linjer uten innrykk. Standardverdien er en tom streng "" som velger den mest kompakte representasjonen. Bruke et positivt heltall for innrykk innrykk så mange mellomrom per nivå. Når innrykk er en streng, for eksempel Chr(9) eller Tab(1), brukes Tab-tegnet til å rykke inn hvert nivå.

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

Lagrer innholdet i ordboken i en matrise PropertyValues.

Hver oppføring i matrisen er en com.sun.star.beans.PropertyValue. Nøkkelen er lagret i Navn, elementet er lagret i Verdi.

Hvis en av elementene har en type Dato, konverteres den til en com.sun.star.util.DateTime struktur. Hvis ett av elementene er en tom matrise, konverteres den til Null. Den resulterende matrisen er tom når ordboken er tom.

Syntaks:

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

Eksempel:

I Basic
Dim myDict as Variant
myDict = CreateScriptService("Dictionary")
'Legger til noen egenskaper i ordboken
myDict.Add("Color", "Blue")
myDict.Add("Width", 20)
'Konverterer til en matrise med PropertyValue-objekter
Dim prop as Variant
prop = myDict.ConvertToPropertyValues()
I Python

Legg merke til i eksemplet nedenfor at en Python-ordbok må sendes som det andre argumentet for CreateScriptService-metoden.

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

Mange tjenester og metoder i UNO-biblioteket tar inn parametere representert ved hjelp av PropertyValue-strukturen, som er en del av Collabora Office API.


Exists

Bestemmer om det finnes en nøkkel i ordboken.

Syntaks:

dict.Exists(key: str): bool

Parametre:

nøkkel: Nøkkelen som skal slås opp i ordboken.

Eksempel:

Dim myDict as Variant
myDict = CreateScriptService("Dictionary")
'Legger til noen egenskaper i ordboken
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

Legger til innholdet i en JSON (JavaScript Object Notation)-streng i gjeldende ordbok. Returnerer Sann hvis vellykket.

Begrensninger

JSON-strengen kan inneholde tall, tekst, booleaner, nullverdier og matriser som inneholder disse typene. Den må ikke inneholde JSON-objekter, nemlig underordbøker.

Det gjøres et forsøk på å konvertere tekst til dato hvis elementet samsvarer med ett av disse mønstrene: ÅÅÅÅ-MM-DD, TT:MM:SS eller ÅÅÅÅ-MM-DD TT:MM:SS.

Syntaks:

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

Parametre:

inputstr: Strengen som skal importeres.

overskriv: Når Sann, kan oppføringer med samme navn finnes i ordboken og verdiene deres overskrives. Når Usann (standard), vil gjentatte taster gi en feilmelding. Vær oppmerksom på at ordboknøkler ikke skiller mellom store og små bokstaver, mens navn skiller mellom store og små bokstaver i JSON-strenger.

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)
'(under)-ordbøkene "adresse" og "telefonnumre" (0) og (1) importeres som tomme verdier.

ImportFromPropertyValues

Setter inn innholdet i en rekke PropertyValue-objekter i gjeldende ordbok. PropertyValue Navn brukes som nøkler i ordboken, mens verdier inneholder de tilsvarende verdiene. Returnerer Sann hvis vellykket.

Syntaks:

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

Parametre:

propertyvalues: En nullbasert 1-dimensjonal matrise som inneholder com.sun.star.beans.PropertyValue objekter. Denne parameteren kan også være et enkelt PropertyValue-objekt som ikke finnes i en matrise.

overskriv: Når True, kan oppføringer med samme navn finnes i ordboken og verdiene deres overskrives. Når False (standard), vil gjentatte taster gi en feilmelding. Merk at ordboknøkler ikke skiller mellom store og små bokstaver i Basic, mens navn skiller mellom store og små bokstaver i sett med egenskapsverdier og i Python-ordbøker.

Eksempel:

Eksemplene nedenfor oppretter først en matrise med to PropertyValue-objekter og konverterer den deretter til en ordbok.

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

Henter en eksisterende ordbokoppføring basert på nøkkelen. Returnerer verdien av elementet hvis det lykkes, ellers returnerer Tom.

Syntaks:

dict.Item(key: str): any

Parametre:

nøkkel: Skiller ikke mellom store og små bokstaver. Hvis den ikke eksisterer, returneres verdien Tom.

Eksempel:

Følgende eksempel itererer over alle nøklene i ordboken og bruker Element-metoden for å få tilgang til verdiene deres.

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 ordbokoppføring basert på nøkkelen. Returnerer Sann hvis vellykket.

Syntaks:

dict.Remove(key: str): bool

Parametre:

nøkkel: Skiller ikke mellom store og små bokstaver. Må finnes i ordboken, ellers oppstår en UNKNOWNKEYERROR feil.

Eksempel:

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

RemoveAll

Fjerner alle oppføringene fra ordboken. Returnerer Sann hvis vellykket.

Syntaks:

dict.RemoveAll(): bool

Eksempel:

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

ReplaceItem

Erstatter en eksisterende vareverdi basert på nøkkelen. Returnerer Sann hvis vellykket.

Syntaks:

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

Parametre:

nøkkel: Strengverdi som representerer nøkkelen hvis verdi vil bli erstattet. Ikke skille mellom store og små bokstaver. Hvis nøkkelen ikke finnes i ordboken, vises en UNKNOWNKEYERROR feil.

verdi: Den nye verdien til elementet det refereres til med nøkkel parameteret.

Eksempel:

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

ReplaceKey

Erstatter en eksisterende nøkkel i ordboken med en ny nøkkel. Vareverdien forblir uendret. Returnerer Sann hvis vellykket.

Syntaks:

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

Parametre:

nøkkel: Strengverdi som representerer nøkkelen som skal erstattes. Ikke skille mellom store og små bokstaver. Hvis nøkkelen ikke finnes i ordboken, vises en UNKNOWNKEYERROR feil.

verdi: Strengverdi for den nye nøkkelen. Ikke skille mellom store og små bokstaver. Hvis den nye nøkkelen allerede finnes i ordboken, vises en DUPLICATEKEYERROR feil.

Eksempel:

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

Alle ScriptForge Grunnleggende rutiner eller identifikatorer som er prefikset med et understrekingstegn "_" er reservert for intern bruk. De er ikke ment å brukes i grunnleggende makroer eller Python-skript.


Supporter oss!