![]() |
Texte auf Ähnlichkeit vergleichen
Hallo zusammen. Ich hab mir hier eine Funktion geschrieben, die, wenn zwei texte ungefähr gleich sind, true zurückgibt. Aber irgendwo hab ich einen Fehler:
Delphi-Quellcode:
Danke. Man liest sich. Stanlay 8)
function TSuchenForm.FehlerToleranz(FehlerStr, VergleichStr: String;
Toleranzwert: Integer): Boolean; var j, fehler: Integer; begin For j := 0 to Length(FehlerStr) do begin IF FehlerStr[j] <> VergleichStr[j] THEN //Hier wird jeder der Zeichen der zwei texte verglichen fehler := fehler +1; end; IF Fehler <= ((Toleranzwert / 100) * Fehler) THEN //Wahrscheinlich hab ich hier einen Fehler gemacht, beim ausrechnen des Prozentsatzes FehlerToleranz := true; end; |
Hallo,
lass Deine Schleife besser bei 1 beginnen, anstatt bei 0. Ausserdem wäre es das nächste mal Sinnvoller auch zu sagen was denn genau nicht geht. Grüsse, Daniel :hi: |
Wenn Du ein Delphi3000 Abo hast, schau Dir mal den Artikel an:
![]() Ansonsten suche mal im Internet nach: "Damerau-Levenshtein-Metric for string comparsion". Ist zwar nicht Deine Lösung, aber eine der besten für Dein Ziel. ...:cat:... |
Hallo Daniel. Erstmal Danke für die Hilfe. Ich dachte, dass das Text[] Ding nullbasiert ist. Aber leider geht es dehalb auch noch nicht. Zu deiner Anmerkung: Alles geht nicht. Er kompiliert und dann passiert: Nichts. Gar nix: Ich hab die Funktion so aufgerufen:
Delphi-Quellcode:
Aber wahrscheinlich hab ich zuviele Fehler gemacht (Sowhl in der Funktion als auch im Aufruf).
IF FehlerToleranz(Edit6.Text,Edit7.Text,50) = true THEN
ShowMessage('Akzeptabel'); Man liest sich. Stanlay :cry: |
Hallo,
Zitat:
Zitat:
Kleiner Tip noch, wenn Du schon auf True abfrägst:
Delphi-Quellcode:
Reicht auch schon.
IF FehlerToleranz(Edit6.Text, Edit7.Text, 50) THEN
ShowMessage('Akzeptabel'); Versuch aml folgendes, um sicher zu sein das die Funktion überhaupt funktioniert: Nimm den Toleranzwert raus, auch aus dem Aufruf, schreib in einem Edit Hans und im anderen Wurst rein, oder sonst was. Und schau einfach ob Du jemals überhaupt ein Ergebniss von der Funktion bekommst, es reicht ja wenn Du es durchDebuggst, siehst eh besser was los ist, anstatt immer auf ne blöde Message zu warten die nie kommt. ;) Grüsse, Daniel :hi: |
Das mit dem Probieren ist wohl wahr. Danke erst mal, für deine Schnelle Hilfe. Ich muss das jetzt erst mal "verarbeiten". Wenns nicht geht schreib ich halt einfach noch mal was nicht geht.
Danke. Stanlay :D |
Ich hab aus obiger Funktion, wie du gesagt hast, den Tolreanzwert rausgenommen und, zur Kontrolle, festgelegt, dass am Ende der Funktion die Fehleranzahl in die Titelleiste geschrieben wird. Und da steht dann
4438752 :shock: Und das obwohl im einen Edit Edit6 und im anderen Edit7 steht. also genau ein Zeichen unterschied. Wie kann das gehen??? |
hmm versuch mal statt / div zu nehmen...
|
Wie gesagt. ich hab aus obiger funkion den Toleranzwert rausgenommen. Hab also nix mehr zum teilen.
|
Hallo,
hier ist mal ein bisschen Code der Sicherlich funktioniert. Nimm einfach zwei Edits und ein Button.
Delphi-Quellcode:
Das ganze basiert natürlich da drauf, das die Länge der Texte in den Edits, absolut gleich ist, daher Vermute ich die utopische Zahl von oben, das Du im zweiten Edit warscheinlich ein kürzeres Wort hast.
procedure TForm1.Button1Click(Sender: TObject);
var iFor, iFehler: integer; begin iFehler := 0; for iFor := 0 to Length(Edit1.Text) do begin if Edit1.Text[iFor] <> Edit2.Text[iFor] then Inc(iFehler); end; ShowMessage(IntToStr(iFehler)); end; Grüsse, Daniel :hi: |
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:43 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