version=1.0.1 vdate=19.09.2014 fname=udf_compaire.bas ns=%NAMESPACE% fpath=/vba/functions {{keywords>vba,function,compaire,array,object,dictionary}} {{description>Eine Funktion zum Vergleichen. Klingt eigentlich unnötig. Doch vergleicht sie alles Mögliche. Arrays untereinander, Dictionaries, Null mit Empty etc.}} ====== [VBA] compaire() ====== //Eine Funktion zum Vergleichen. Klingt eigentlich unnötig. Doch vergleicht sie alles Mögliche. Arrays untereinander, Dictionaries, Null mit Empty etc. // ==Version %%version%% %%vdate%%== {{%%fname%%|Download %%fname%% (V-%%version%%)}} ===== Definitionen ===== ===== Beispiele ===== ==== Einfache Werte vergleichen ==== 'Ein einfacher Vergleich 2er Werte ? compaire(1234, 1234.00) True 'Dasselbe mit Typenprüfung. Der Erste Parameter ist ein Integer, der Zweite ein Double ? compaire(1234, 1234.00, cpVarTypeStrong) False 'Dasselbe Spiel mit einem Vergleich 0 und Null ? compaire(Null, 0) True ? compaire(Null, 0, cpVarTypeStrong) False ==== Arrays vergleichen ==== > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]]. Ich vergleiche mal die 2 folgenden Arrays miteinander print_rm array("1","2","2",array("4","5")), array(2,1,array(5.0,4.0),2) ( [0] => 1 [1] => 2 [2] => 2 [3] => ( [0] => 4 [1] => 5 ) ) ( [0] => 2 [1] => 1 [2] => ( [0] => 5 [1] => 4 ) [3] => 2 ) 'Normalverlgeich. Es wird Index und Value verglichen. Das ganze ohne Typenvergleich ? compaire(array("1","2","2",array("4","5")), array(2,1,array(5.0,4.0),2)) False 'Nur ValueVergleich, immer noch ohne Typenvergleich ? compaire(array("1","2","2",array("4","5")), array(2,1,array(5.0,4.0),2),cpArrayValuesOnly) True 'Und jetzt mit Mit Typenvergleich ? compaire(array("1","2","2",array("4","5")), array(2,1,array(5.0,4.0),2), cpArrayValuesOnly+cpVarTypeStrong) False ==== Dictionaries vergleichen ==== > Für die folgenden Vergleich mit Dictionaries verwende ich die Funktion [[vba:cast:cdict]] um die Dictionaries zu erstellen > Für die Ausgabe der Resultate verwendete ich die Funktion [[:vba:functions:print_r:]]. 'Die Arrays: print_rm cDict("A", 1, "B", 2.0) , cDict("B", 2, "A", 1) ( [A] => 1 [B] => 2 ) ( [B] => 2 [A] => 1 ) 'Erster Vergleich: Check ob beide dieselben Einträge mit denselben Werten beinhaltet ? compaire(cDict("A", 1, "B", 2.0) , cDict("B", 2, "A", 1)) True 'Überprüft, ob die 2 Objekte dieselbe Instanz sind ? compaire(cDict("A", 1, "B", 2.0) , cDict("B", 2, "A", 1), cpInstanceCompaire) False 'Zusätzlich zu den Keys und Values auf den Values noch ein Typenvergleich ? compaire(cDict("A", 1, "B", 2.0) , cDict("B", 2, "A", 1), cpVarTypeStrong) False ===== Code =====