V minulém díle seriálu o řetězcích jsme se neučili používat základní funkce pro zpracování řetězců. Dnes se dozvíte o funkcích pro vyhledávaní v řetězcích a záměnu řetězce jiným řetězcem a nakonec vám ukážu jednu užitečnou funkci, která není ve standardní výbavě Visual Basic Scriptu.

Hledání řetězce v řetězci
Jistě jste již někdy potřebovali v nějakém řetězci nalézt jiný řetězec. Pro tyto případy je Visual Basic Script vybaven funkcí Instr.

vysledek=Instr([start,]retezec,hledany_retezec[,porovnani])

Funkce Instr vrátí 0 (nulu) pokud řetěze nenajde. Pokud hledaný řetězec je součástí zdrojového řetězce funkce vrátí nenulovou hodnotu, která určuje pozici počátku hledaného řetězce od počátku zdrojového řetězce. Pokud není uveden volitelný parametr start zdrojový řetězec se prohledává od počátku.

Hledání řetězce v řetězci od konce řetězce
Funkce InstrRev funguje naprosto stejně jako funkce Instr, ale s tím rozdílem, že řetězec prohledává od konce (nebo zadané pozice) směrem k začátku.

vysledek=InStrRev(retezec,hledany_retezec[,start][,porovnani])

Funkce InstrRev vrátí 0 (nulu) pokud řetěze nenajde. Pokud hledaný řetězec je součástí zdrojového řetězce funkce vrátí nenulovou hodnotu, která určuje pozici počátku hledaného řetězce od počátku zdrojového řetězce.

POZOR – přestože funkce prohledává řetězec od konce, vrací pozici v hledaném řetězci od jeho počátku.

Pokud není uveden volitelný parametr start zdrojový řetězec se prohledává od počátku.

Náhrada řetězce v textu jiným řetězcem
Jistě jste již někdy při formátování výstupu potřebovali například nahradit obyčejné mezery mezerou pevnou. Pro tento případ tu máme funkci Replace, která si s tímto (a nejenom tímto) problémem hravě poradí.

novy_retezec=Replace(zdrojovy_retezec,hledany_retezec,nahradni_retezec [,start] [,pocet_zamen] [,porovnani])

Funkce Replace prochází zdrojovy_retezec a hledá v něm hledany_retezec. Pokud je hledany_retezec nalezen je nahrazen nahradnim_retezcem.

Parametr start určuje pozici ve zdrojovém řetězci od které se započne s hledáním a hrazováním. Pokud je tento parametr vynechán jsou záměny prováděny od počátku zdrojového řetězce.

Pomocí parametru pocet_zamen máte možnost omezit počet, kolikrát se provede záměna řetězců. Pokud tento parametr vynecháte záměna se provede tolikrát, kolikrát bude potřeba pro zpracování celého řetězce.

Parametr porovnání u funcí Instr,InstrRev a Replace
Pozorný čtenář si jistě všiml, že všechny tři výše uvedené funkce mají nepovinný paramtr porovnání. Tento parametr určuje jakým způsobem se bude přistupovat k analýze řetězců.

Konstanta Hodnota Význam
vbBinaryCompare 0 Řetězce si musí přesně odpovídat včetně velikosti písmen
vbTextCompare 1 Na velikost písmen není brán ohled.

Pokud je tento parametr vynechán je použita hodnota 0 což znamená, že porovnávané řetězce se musí naprosto přesně shodovat včetně velikosti písmen.

Odstranění vícenásobných znaků v řetězci.
Jistě jste se již setkali s problémem, že uživatel zadal řetězec, který obsahoval zbytečné znaky (například více mezer mezi slovy). Visual Basic Script ani JavaScript nemají ve své výbavě funkci na řešení tohoto problému.

Použití samotné funkce Replace tento problém totiž neřeší dokonale, neboť je možné, že analyzovaný řetězec bude obsahovat například 3 mezery a po Replace bude obsahovat mezery dvě.

Nám to, ale moc nevadí neboť si dokážeme napsat funkci, která tuhle činnost bez problémů zastane. Co k tomu budeme potřebovat? – Funkci Instr pro zjištění existence řetězce v řetězci a funkci Replace pro záměnu řetězce řetězcem.

Function BezMezer(retezec)
   Do while instr(retezec,“  „)<>0
      retezec=Replace(retezec,“  „,“ „)
   Loop
BezMezer=retezec
End Function

Jak funguje tato funkce si můžete vyzkoušet v příkladu. Pro lepší názornost jsou mezery nahrazeny tvrdými mezerami.


<% Function BezMezer(retezec) Do while instr(retezec," ")<>0 retezec=Replace(retezec,“ „,“ „) Loop BezMezer=retezec End Function %> <%if Request.Form("priklad")<>1 then%>

#priklad1″ id=form1 name=form1> Zde vložte text:

<%else retez=Request.Form("text") response.write("Zdrojový řetězec :"&replace(retez," "," ")&"
„) response.write(„Upravený řetězec :“&replace(bezmezer(retez),“ „,“ „)) Response.Write(„
Nové zadání řetězce„) end if%>


A ještě pro úplnost zdrojový kód příkladu na otestování funkce BezMezer.

<%if Request.Form(„priklad“)<>1 then%>
<form method=post action=“<%=Request.ServerVariables(„script_name“)%>#priklad1″ id=form1 name=form1>
<INPUT type=“hidden“ name=priklad value=“1″>
Zde vložte text: <INPUT type=“text“ name=text><br>
<INPUT type=“submit“ value=“Submit“ id=submit1 name=submit1>
</form>
<%else
retez=Request.Form(„text“)
response.write(„Zdrojový řetězec :“&replace(retez,“ „,“ „)&“<br>“)
response.write(„Upravený řetězec :“&replace(bezmezer(retez),“ „,“ „))
Response.Write(„<br><a href=“““&Request.ServerVariables(„script_name“)&“““>Nové zadání řetězce</a>“)
end if%>

To je pro dnešek vše. A co nás čeká příště? Dozvíte se o dalších vestavěných funkcích Visual Basic Scriptu pro práci s řetězci a přidám několik funkcí, které vám při práci s řetězci ušetří spousty práce.

Žádný příspěvek v diskuzi

Odpovědět