Hallo,
In einem anderen Thread habe ich bereits gefragt, wie ich die for-Schleife meines Dublettenprüfprogramms optimieren kann.
(
Thread)
Das Programm soll jetzt so erweitert werden, dass man auf der Oberfläche über Checkboxen die zu vergleichenden Felder auswaehlen kann (Name, Str,Ort, etc).
Der Aufbau sieht derzeit so aus, dass die Dubleteten in einer Funktion nach der Levenshtein Distance verglichen werden (function ZmergeStrings). Umstaendlich erscheint mir aber, dass ich bei jedem Vergleich den Status der Checkboxen erneut abfrage. Welches ist die beste Methode diese unnoetigen Abfragen zu ersetzten?
Gruß Wolfram
Ps: Gibt es eine Rekursive möglichkeit, die beiden for-schleifen zu ersetzen?
Delphi-Quellcode:
procedure Vergleiche(zfactorT: integer);
var x,y,t: integer;
tmp: boolean;
begin
for x := 1 to SizeOfTable-1 do
begin
for y := x+1 to SizeOfTable do
begin
t := 0;
if (checkname1.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_name1),
lowercase(ZFinalArray[y].ZBP_name1),ord(checkmax.checked));
if (checkname2.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_name2),
lowercase(ZFinalArray[y].ZBP_name2),ord(checkmax.checked));
if (checkstreet.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_street),
lowercase(ZFinalArray[y].ZBP_street),ord(checkmax.checked));
if (checkpostcode.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_postcode),
lowercase(ZFinalArray[y].ZBP_postcode),ord(checkmax.checked));
if (checkcity.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_city1),
lowercase(ZFinalArray[y].ZBP_city1),ord(checkmax.checked));
if (checkemail.Checked = true) then
t := t + ZmergeStrings(lowercase(ZFinalArray[x].ZBP_email),
lowercase(ZFinalArray[y].ZBP_email),ord(checkmax.checked));
if ((t <= zfactorT) and
...
then
begin
ZFinalArray[y].ZBP_dublette := true;
...
...