Vyzrajte nad řetězcovými proměnnými v ASP – zvýrazňování

28. července 2000

V minulých dvou částech seriálu článků o řetězcových funkcích v ASP jste se seznámili s vestavěnými funkcemi Visual Basic Scriptu pro zpracování řetězců. Dnes vám přinášíme několik funkcí, které mohou ulehčit vaše trápení s vytvářením stránek v ASP.

Zvýraznění vybraného slova
Mnohdy se vám stane, že potřebujete v textu zvýraznit nějaké slovo. Pomocí funkce, kterou vám dnes představím, to nebude žádný problém. <% 'function zvyrazni(text,slovo,barva) 'if len(text)<>0 then ‚pozice=instr(lcase(text),lcase(slovo)) ‚ if pozice<>0 then ‚ zacatek=left(text,pozice-1) ‚ konec=right(text,len(text)-pozice-len(slovo)+1) ‚ stred=mid(text,pozice,len(slovo)) ‚ zvyrazni=zvyrazni & zacatek &“„&stred&“„&konec ‚ else ‚ zvyrazni=text ‚ end if ‚else ‚ zvyrazni=text ‚end if ‚end function ‚response.write(zvyrazni(„Visual Basic Scripting – Jak snadné je používat Visual Basic Scripting“,“basic“,“red“)) ‚function zvyrazni1(text,slovo,barva) ‚if len(text)<>0 then ‚ pozice=instr(lcase(text),lcase(slovo)) ‚ if pozice<>0 then ‚ zacatek=left(text,pozice-1) ‚ stred=mid(text,pozice,len(slovo)) ‚ konec=zvyrazni1(right(text,len(text)-pozice-len(slovo)+1),slovo,barva) ‚ zvyrazni1=zvyrazni1 & zacatek &“„&stred&“„&konec ‚ else ‚ zvyrazni1=text ‚ end if ‚else ‚ zvyrazni1=text ‚end if ‚end function ‚response.write(zvyrazni1(„Visual Basic Scripting – Jak snadné je používat Visual Basic Scripting“,“basic“,“red“)) ‚function zvyraznic(text,slovo,barva) ‚ if len(text)<>0 then ‚ index=1 ‚ delka=len(text) ‚ delkaslova=len(slovo) ‚ do while index 0 then ‚ zvyraznic=zvyraznic&mid(text,index,pozice-index)&“„&mid(text,pozice,delkaslova)&““ ‚ index=pozice+delkaslova ‚ else ‚ if index

<%
function zvyrazni(text,slovo,barva)
   if len(text)<>0 then
      pozice=instr(lcase(text),lcase(slovo))
      if pozice<>0 then
         zacatek=left(text,pozice-1)
         konec=right(text,len(text)-pozice-len(slovo)+1)
         stred=mid(text,pozice,len(slovo))
         zvyrazni=zvyrazni & zacatek &“<b><font color=“&barva&“>“&stred&“</font></b>“&konec
      else
         zvyrazni=text
      end if
   else
      zvyrazni=text
   end if
end function
response.write(zvyrazni(„Visual Basic Scripting“,“basic“,“red“))
%>

Použití konstrukce pozice=instr(lcase(text),lcase(slovo)) způsobí, že jsou nalezeny všechny slova bez ohledu na velikost písmen. Pokud chcete mít funkci takovou, že bude rozlišovat mezi velkými a malými písmeny, použijte konstrukci pozice=instr(text,(slovo).

Výsledek funkce:


Visual Basic Scripting


Zdánlivě vše vypadá, že v pořádku, ale pouze do okamžiku, než funkci předhodíte text, ve kterém je několik slov, které chcete zvýraznit. Funkce pak zvýrazní pouze první nalezené slovo.

Pokud chcete, aby funkce uměla označit třeba dvě slova, máte dvě možnosti, jak to udělat. Jako první možnost asi většinu z vás napadne to, že bude v cyklu procházet celý řetězec.

<%
function zvyraznic(text,slovo,barva)
   if len(text)<>0 then
      index=1
      delka=len(text)
      delkaslova=len(slovo)
      do while index<delka
         pozice=instr(index,lcase(text),lcase(slovo))
         if pozice<> 0 then
            zvyraznic=zvyraznic&mid(text,index,pozice-index)&“<b><font color=“&barva&“>“&mid(text,pozice,delkaslova)&“</font></b>“
            index=pozice+delkaslova
         else
            if index<delka then
               zvyraznic=zvyraznic&right(text,10)
               index=delka
            end if
         end if
      loop
   else
      zvyraznic=text
   end if
end function
response.write(zvyraznic(„Visual Basic Scripting – Jak snadné je používat Visual Basic Scripting“,“basic“,“blue“))
%>

Jak vidíte, funkce se nám poněkud prodloužila díky kontrolám pozice v řetězci a posunům ukazatele v řetězci.

Jak jsem již předeslal, existuje ještě druhé řešení. Dovolím si tvrdit, že toto řešení je jednodušší a přehlednější – jedná se o Rekurzi. Dříve než vám předvedu, jak jednoduše lze upravit funkci tak, aby vyhledala a označila slova v celém řetězci, je třeba se zmínit, co to vlastně ta rekurze je.

Při použití rekurzívních algoritmů je funkce postavena tak, že během své činnosti volá sama sebe. V našem případě to znamená, že řetězec od nalezeného slova do konce řetězce zpracujeme opětovně stejnou funkcí. Jak sami vidíte, použití rekurze si vyžádalo úpravu jediného řádku funkce:

<%
function zvyrazni1(text,slovo,barva)
   if len(text)<>0 then
      pozice=instr(lcase(text),lcase(slovo))
      if pozice<>0 then
         zacatek=left(text,pozice-1)
         konec=zvyrazni1(right(text,len(text)-pozice-len(slovo)+1)
)          stred=mid(text,pozice,len(slovo))
         zvyrazni1=zvyrazni1 & zacatek &“<b><font color=“&barva&“>“&stred&“</font></b>“&konec
      else
         zvyrazni1=text
      end if
   else
      zvyrazni1=text
   end if
end function
response.write(zvyrazni(„Visual Basic Scripting – Jak snadné je používat Visual Basic Scripting“,“basic“,“red“))
%>

Pro úplnost uvedu ještě jednu verzi této funkce, tentokráte s použitím funkce replace. Nevýhodou tohoto řešení je fakt, že ho nelze použít v případě, pokud chceme označovat slova bez ohledu na velikost písmen.

<%
function zvyrazni2(text,slovo,barva)
   nahrada=“<b><font color=“&barva&“>“&slovo&“</font></b>“
   zvyrazni2=replace(text,slovo,nahrada)
end function
response.write(zvyrazni2(„Visual Basic Scripting – Jak snadné je používat Visual Basic Scripting“,“Basic“,“green“))
%>

To je pro dnešek vše. Pokud máte tip, jaké funkce byste na Intervalu rádi viděli, pošlete mi e-mail nebo je uveďte do diskuse ke článku.

Starší komentáře ke článku

Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.

Štítky: Články

Mohlo by vás také zajímat

Nejnovější

Napsat komentář

Vaše e-mailová adresa nebude zveřejněna. Vyžadované informace jsou označeny *