porovnavani retezcu
Jan Serak
sherry na pikebo.cz
Čtvrtek Květen 22 13:15:49 CEST 2003
Vladimir Naprstek wrote:
> Zdravim,
> potrebuji nejak elegantne porovnat dva retezce a zjistit v kolika
> znacich se lisi. Nikoliv delkou, ale na pozicich, napr. "Karel" a
> "karek" se lisi 2 znaky). Porovnavat znaky jeden po druhem mi prijde
> dosti tezkopadne.
> Jo a bude to delat procedura v oracle (8i).
>
> Nejaky napad?
Obavam se, ze bud to budete muset ziterovat znak po znaku. Muzete to
zkusit nejakou dobre napsanou rekurzivni funkci,
FUNCTION vzdalenost (jedna varchar2,dva varchar2) RETURN integer IS
pulka integer;
BEGIN
IF jedna=dva THEN return(0);
ELSE
pulka:=floor(length(jedna)/2);
return(
vzdalenost(substr(jedna,1,pulka),substr(dva,1,pulka))
+
vzdalenost(substr(jedna,pulka+1),substr(dva,pulka+1))
);
END IF;
END;
Bohuzel, jak znam PL/SQL, tak rezie interpretace takoveto funkce bude
mnohem vyssi, nez uspora v usetrenych porovnavanich. Ale pokud budete
srovnavat retezce "straslive podobne" (rozdilny bude nejvyse kazdy
desaty znak), tak by to mohlo byt zajimave srovnat.
Jan Serak
DISCLAIMER
----------
PL/SQL kod obsazeny v tomto dopise je pouze ideove-instruktazni, autor
nezarucuje ani uspesne zparsovani ;-)
Další informace o konferenci Test