![]() |
String Vergleichen.... function - funktioniert nicht...
Moin,
hab ne interessante Funktion im swissdelphicenter gefunden. Aber die Funzt net... Vielleicht lade ich die falschen units ? ???uses math ??? Dazu macht der Autor keine Angabgen. Die Funktion soll zwei strings vergleichen und die prozentzahl der "gleichheit" zurückgeben... :?: weiß jemand wie man die funktion zum laufen bringt... :?: euer Andreas PS: hier noch die funktion
Delphi-Quellcode:
function CompareStringsInPercent(Str1, Str2: string): Byte;
type TLink = array[0..1] of Byte; var tmpPattern: TLink; PatternA, PatternB: array of TLink; IndexA, IndexB, LengthStr: Integer; begin Result := 100; // Building pattern tables LengthStr := Max(Length(Str1), Length(Str2)); for IndexA := 1 to LengthStr do begin if Length(Str1) >= IndexA then begin SetLength(PatternA, (Length(PatternA) + 1)); PatternA[Length(PatternA) - 1][0] := Byte(Str1[IndexA]); PatternA[Length(PatternA) - 1][1] := IndexA; end; if Length(Str2) >= IndexA then begin SetLength(PatternB, (Length(PatternB) + 1)); PatternB[Length(PatternB) - 1][0] := Byte(Str2[IndexA]); PatternB[Length(PatternB) - 1][1] := IndexA; end; end; // Quick Sort of pattern tables IndexA := 0; IndexB := 0; while ((IndexA < (Length(PatternA) - 1)) and (IndexB < (Length(PatternB) - 1))) do begin if Length(PatternA) > IndexA then begin if PatternA[IndexA][0] < PatternA[IndexA + 1][0] then begin tmpPattern[0] := PatternA[IndexA][0]; tmpPattern[1] := PatternA[IndexA][1]; PatternA[IndexA][0] := PatternA[IndexA + 1][0]; PatternA[IndexA][1] := PatternA[IndexA + 1][1]; PatternA[IndexA + 1][0] := tmpPattern[0]; PatternA[IndexA + 1][1] := tmpPattern[1]; if IndexA > 0 then Dec(IndexA); end else Inc(IndexA); end; if Length(PatternB) > IndexB then begin if PatternB[IndexB][0] < PatternB[IndexB + 1][0] then begin tmpPattern[0] := PatternB[IndexB][0]; tmpPattern[1] := PatternB[IndexB][1]; PatternB[IndexB][0] := PatternB[IndexB + 1][0]; PatternB[IndexB][1] := PatternB[IndexB + 1][1]; PatternB[IndexB + 1][0] := tmpPattern[0]; PatternB[IndexB + 1][1] := tmpPattern[1]; if IndexB > 0 then Dec(IndexB); end else Inc(IndexB); end; end; // Calculating simularity percentage LengthStr := Min(Length(PatternA), Length(PatternB)); for IndexA := 0 to (LengthStr - 1) do begin if PatternA[IndexA][0] = PatternB[IndexA][0] then begin if Max(PatternA[IndexA][1], PatternB[IndexA][1]) - Min(PatternA[IndexA][1], PatternB[IndexA][1]) > 0 then Dec(Result, ((100 div LengthStr) div (Max(PatternA[IndexA][1], PatternB[IndexA][1]) - Min(PatternA[IndexA][1], PatternB[IndexA][1])))) else if Result < 100 then Inc(Result); end else Dec(Result, (100 div LengthStr)) end; SetLength(PatternA, 0); SetLength(PatternB, 0); end; |
Re: String Vergleichen.... function - funktioniert nicht...
Denkst du nicht auch, dass eine Fehlerangabe für uns hilfreich sein könnte?
|
Re: String Vergleichen.... function - funktioniert nicht...
Zitat:
Was genau meinst du mit "funzt net"? |
Re: String Vergleichen.... function - funktioniert nicht...
Zitat:
Wir hätten ![]() |
da kommt meistens 100% raus...
Bitte um Verzeihung... bin etwas abwesend gewesen... :cyclops:
das Eheleben :kiss: ist halt schon anders... als früher:
Delphi-Quellcode:
ok... jetzt zum "funzt net..." = funktioniertn nicht...
while not 1=2 do :coder: // heute gibts breaks or so... ;-)
also wenn ich einen zwei längere Texte übergebe... dann kommt da meißtens nur 100% raus... naja, hab schon überlegt das es an den Sonderzeichen liegt wie #9 oder #13 oder #10 für Tab und Zeilenumbrüche... aber das geht trotzdem nich... :nerd: vielleicht hat jemand von euch eine gute Idee or so... was ich da falsch mache... |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:46 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz