HyperLink
Bejelentkezés
E-mail: 
Jelszó: 





Skip Navigation Links
 

Két szöveg egyezését százalékos arányban megadó komponens készítése


Példaprogram letöltése

4164 bájt

A most bemutatásra kerülő példaprogram egy olyan módszert mutat be, melynek segítségével összehasonlíthatunk két szöveget, és a karakterek egyezőségének arányát százalékban kapjuk vissza. Mindehhez készítünk egy komponenst, melybe beírhatunk két szöveges értéket, és az egyezőség arányát adja vissza eredményként.

A mellékelt példaprogram megnyitása előtt a StringCompare.pas-ban levő komponenst telepítenie kell a Delphi alá. Ehhez válassza a Component - Install Component menüpontot.
A feladat megoldását egy függvényre bízzuk, melynek működése a következő:
Vesszük a hosszabb szöveget, majd az elejétől kezdve karakterenként összehasonlítjuk a rövidebb szöveggel mindaddig, míg ez utóbbi el nem fogy. Minden egyes karakteregyezésnél egy számlálót megnövelünk. Miután a vizsgálat végére értünk, képezünk egy százalékos értéket úgy, hogy a számlálóban kapott eredményt elosztjuk a hosszabb szöveg karakterszámával, és az egészet megszorozzuk 100-al.
Nézzük, hogyan is épül fel a komponensünk:
Először is létrehozunk két published property-t, Text1 és Text2 néven, melyekbe az összehasonlítandó szövegeket vihetjük be. Ezután létrehozunk egy StringCompare nevű függvényt, mely elvégzi az összehasonlítást. A visszatérési értéke double típusú lesz.
function TStringCompare.Compare: Double;
var
  i, iMin, iMax, iSameCount: Integer;
begin
A Length() függvénnyel lekérdezzük a kapott szövegek hosszát, azaz hány karakterből is állnak, majd közülük a nagyobbat az iMax, míg a kisebbet az iMin változóban tároljuk el.
  iMax:=Max(Length(Text1),Length(Text2));
  iMin:=Min(Length(Text1),Length(Text2));
Az iSameCount változóban tároljuk az egyező karakterek számát, melyet a vizsgálat elején -1-re állítunk.
  iSameCount:=-1;
Egy ciklust indítunk nullától az iMax értékéig. Az iMax-ban tároljuk a hosszabb szöveg karaktereinek számát.
  for i:=0 to iMax do
  begin
Ha elfogyott az összehasonlítandó szöveg, akkor kilépünk a ciklusból.
    if i>iMin then
      break;
Ha egyező karaktert találunk, az iSameCount értékét megnöveljük eggyel.
    if FText1[i]=FText2[i] then
      Inc(iSameCount)
    else
      break;
  end;
Ha a vizsgálat során volt legalább 1 egyező karakter, akkor kiszámítjuk a már fentebb említett módon az egyezőség százalékos arányát.
  if iSameCount>0 then
    Result:=(iSameCount/iMax)*100
  else
Amennyiben nem volt egyezőség, a függvény visszatérési értékének nullát adunk.
    Result:=0.00;
end;
A példaprogramban a függvény meghívását a Button1 OnClick eseményéhez kötöttük:
procedure TForm1.Button1Click(Sender: TObject);
var
  match: Double;
begin
  StringCompare1.Text1:=Edit1.Text;
  StringCompare1.Text2:=Edit2.Text;
  match:=StringCompare1.Compare;
  ShowMessage(FloatToStr(match)+' % az egyezés.');
end;
Láthatjuk, hogy a Text1 és Text2 változóknak programból adtunk értéket, azonban ha a két szöveget közvetlenül a komponensbe írjuk be, akkor is meghívható a függvény.

Könyv
Ez a cikk megtalálható ebben a könyvben: Delphi Software Offline 2003 évkönyv 522. oldal

Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!

Copyright © 1999-2012 Animare Software Kft. Minden jog fenntartva!
| Készült: Animare Stúdió | Adatvédelem | Kapcsolat |