Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi String Vergleichen.... function - funktioniert nicht... (https://www.delphipraxis.net/60900-string-vergleichen-function-funktioniert-nicht.html)

spacewolf 13. Jan 2006 21:35


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;

Khabarakh 13. Jan 2006 21:40

Re: String Vergleichen.... function - funktioniert nicht...
 
Denkst du nicht auch, dass eine Fehlerangabe für uns hilfreich sein könnte?

tomsel 13. Jan 2006 21:42

Re: String Vergleichen.... function - funktioniert nicht...
 
Zitat:

??uses math ???
Dazu macht der Autor keine Angabgen.
Die braucht's auf jeden Fall.

Was genau meinst du mit "funzt net"?

Matze 13. Jan 2006 21:44

Re: String Vergleichen.... function - funktioniert nicht...
 
Zitat:

Zitat von spacewolf
???uses math ???
Dazu macht der Autor keine Angabgen.

Das ist eine Unit von Borland, die mathematische Funktionen beinhaltet. Einfach unter den uses eintragen und das Ding ist eingebunden.

Wir hätten
hier auch eine Funktion, die 2 Strings vergleicht.

spacewolf 19. Jan 2006 07:02

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:
 while not 1=2 do :coder: // heute gibts breaks or so... ;-)
ok... jetzt zum "funzt net..." = funktioniertn nicht...

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 13:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz