Autor Thema: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?  (Gelesen 2103 mal)

Offline buzi

  • Aktives Mitglied
  • ***
  • Beiträge: 171
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?


Offline Peter Klett

  • Gold Platin u.s.w. member:)
  • *****
  • Beiträge: 2.713
  • Geschlecht: Männlich
Re: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?
« Antwort #1 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 
« Letzte Änderung: 11.11.15 - 12:43:08 von Peter Klett »

Offline buzi

  • Aktives Mitglied
  • ***
  • Beiträge: 171
Re: ArrayReplace oder wie sonst ein Text/Zahlen Mapping machen?
« Antwort #2 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!

 

Impressum Atnotes.de  -  Powered by Syslords Solutions  -  Datenschutz