Das Notes Forum

Domino 9 und frühere Versionen => ND8: Entwicklung => Thema gestartet von: buzi am 11.11.15 - 12:18:43

Titel: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?
Beitrag von: buzi am 11.11.15 - 12:18:43
Hallo zusammen,

ich möchte aus einer Datenbank1 einen Wert auslesen und in Datenbank2 in einem Feld als passenden Text speichern. Die Idee war, sich den Wert aus Db1 als

Code
Set sourceArray(0) = doc.getItemValue("feldname")(0) 'z.B. 001

zu holen und dann mittels der vordefinierten Ersetzungs-Arrays

Code
Set compareArray = ["001","003","005",....]
Set replaceArray = ["ABC", "XYZ", "IMO"...]

und dem Aufruf

Code
var3 = ArrayReplace(sourceArray, compareArray, replaceArray)
Call docZiel.ReplaceItemValue("fieldZiel", var3(0))

zu setzen.

Probleme hierbei: Wie initialisiere ich die compare- und replace-Arrays korrekt?

Muss ich

Code
compareArray[0] = "001"
compareArray[1] = "002"
.....

schreiben oder geht das irgendwie kürzer in einer Zeile?

Titel: Re: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?
Beitrag von: Peter Klett am 11.11.15 - 12:31:09
Grundsätzlich kannst Du das so machen, wie Du schreibst

Code
Dim compareArray (2)
compareArray (0) = "001"
compareArray (1) = "003"
compareArray (2) = "005"

Wenn es nicht zuviele Werte sind, kannst Du auch Split verwenden

Code
Dim compareArray As Variant
compareArray = Split ("001:003:005", ":")

EDIT: Das "zuviele" bezieht sich nur auf die Schreibweise, ich würde nicht 1000 Werte in eine Zeile schreiben wollen, das ist dann kaum mehr wartbar.

EDIT2: Eine zweite Variante, die ich gerne verwende, ist die Nutzung von Listen, da die in der Größe nur durch den verfügbaren Arbeitsspeicher begrenzt sind. Außerdem stehen die Wertepaare schön zusammen.

Code
Dim compareList List As String
compareList ("001") = "ABC"
compareList ("003") = "XZY"
compareList ("005") = "IMO"

sourceArray = doc.GetItemValue (feldname) (0)
If Iselement (compareList (sourceArray)) Then
   sourceArray = compareList (sourceArray)
End If

'bzw. bei Mehrfachwerten
sourceArray = doc.GetItemVaue (feldname)
Forall sA In sourceArray
   If Iselement (compareList (sA)) Then
      sA = compareList (sA)
   End If
End Forall 
Titel: Re: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?
Beitrag von: buzi am 12.11.15 - 10:55:39
Danke Peter! Mit der kurzen Schreibweise und Split, bekomme ich genau was ich will. Das Array enthält nur 7 Esetzungen das gefällt mir gut in einer Zeile. Die Herangehensweise mit der Liste merke ich mir für größere Daten!