Domino 9 und frühere Versionen > ND8: Entwicklung

ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?

(1/1)

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

--- Ende Code ---

zu holen und dann mittels der vordefinierten Ersetzungs-Arrays


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

--- Ende Code ---

und dem Aufruf


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

--- Ende Code ---

zu setzen.

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

Muss ich


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

--- Ende Code ---

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

Peter Klett:
Grundsätzlich kannst Du das so machen, wie Du schreibst


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

--- Ende Code ---

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


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

--- Ende Code ---

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

--- Ende Code ---

buzi:
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!

Navigation

[0] Themen-Index

Zur normalen Ansicht wechseln