Lekce 1.20
Knihovna pro zpracovßnφ °et∞zc∙


p°edchozφ lekce (1.19) obsah kurzu nßsledujφcφ lekce (1.21)

V p°edchozφch lekcφch jsme pracovali p°evß₧n∞ s numerick²mi hodnotami. DalÜφm typem dat mohou b²t znaky, Φili °et∞zce. Jednß se o seskupenφ znak∙ a pφsmen. Jeden alfanumerick² znak je definovßn typem Char. ╪et∞zec se potom sklßdß z n∞kolika znak∙ a je definovßn typem String. Prom∞nnß typu String m∙₧e obsahovat teoreticky neomezen² poΦet znak∙. Prakticky je velikost °et∞zce omezena velikostφ volnΘ pam∞ti. ZaΦßtek a konec °et∞zce je p°i zßpisu v programu vymezen uvozovkami.

S °et∞zci je mo₧nΘ provßd∞t spoustu operacφ. Je mo₧nΘ je sluΦovat, kopφrovat Φßst pod°et∞zce, dopl≥ovat znaky na libovolnΘ mφsto, p°evßd∞t na Φφslo, zjiÜ¥ovat dΘlku °et∞zce a podobn∞. VeÜkerΘ uvedenΘ funkce obsahuje knihovna pro zpracovßnφ °et∞zc∙, se kterou se nynφ seznßmφme.

Jestli₧e pot°ebujete zjistit dΘlku °et∞zce, pou₧ijte funkci Len:


Writeln(Len(S))
Pokud pot°ebujete z °et∞zce vybrat pro dalÜφ zpracovßnφ pouze jeho Φßst, m∙₧ete pou₧φt funkci Mid, kde zadßte mimo °et∞zce i poΦßteΦnφ pozici a dΘlku pod°et∞zce:

Writeln(Mid("BONANZA",3,4))   'vypφÜe 'NANZ'
Velmi Φast²m po₧adavkem je mo₧nost vyjmout z °et∞zce urΦitou Φßst, p°φpadn∞ do °et∞zce vlo₧it jin² °et∞zec. K vyjmutφ pod°et∞zce je mo₧nΘ pou₧φt p°φstupnou funkci jazyka KLONDAIK Delete, kterß ze zadanΘho °et∞zce zruÜφ od zadanΘ pozice zadan² poΦet znak∙. Naopak, procedura Insert z jazyka KLONDAIK vlo₧φ na zadanou pozici do °et∞zce po₧adovan² pod°et∞zec. Ob∞ funkce m∞nφ souΦasn∞ dΘlku °et∞zce.

'program ZNAKY1.BON
Sub Main()
    S = "Program OZOGAN BONANZA"
    Write ("DΘlka °et∞zce: ")
    Writeln(Len(S))
    S = Insert("*", s, 15)      'vlo₧φ znak '*' do °et∞zce
    Writeln(S)
    S = Delete(S, 1, 8)         'vyjme znaky z °et∞zce
    Writeln(S)                  'vypφÜe: 'OZOGAN*BONANZA'
    Write  ("DΘlka °et∞zce: ")
    Writeln(Len(S))             'vypφÜe: 15
    Write  ("Pozice 'KLON': ")
    Writeln(Pos("KLON", S))     'vypφÜe: 8
End Sub
Pokud pot°ebujete zjistit, zda se v °et∞zci nalΘzß hledan² pod°et∞zec, lze pou₧φt funkci Pos. Funkce vracφ pozici prvnφho znaku hledanΘho pod°et∞zce.

S = "OZOGAN BONANZA"
Writeln(Pos("KLON",S))   'vracφ Φφslo 8
Ka₧d² znak v °et∞zci mß svou Φφselnou hodnotu, udßvajφcφ pozici znaku v ASCII tabulce, ve kterΘ je umφst∞no vÜech 256 mo₧n²ch znak∙. ASCII tabulka je pevn∞ definovßna a platφ i mimo systΘm KLONDAIK. Spodnφ Φßst tabulky do pozice 125 je v₧dy pevn∞ dßna. Hornφ Φßst tabulky ji₧ zßle₧φ na definici nßrodnφho prost°edφ poΦφtaΦe (nap°. pφsmena s diakritikou). Na zaΦßtku tabulky jsou umφst∞ny tzv. netisknutelnΘ znaky, kterΘ se pou₧φvajφ pro obsluhu tiskßrny. Dßle jsou ji₧ definovßny jednotlivΘ znaky. Ka₧d² znak °et∞zce m∙₧ete proto rozlo₧it na jednotlivΘ znaky a jejich hodnoty. V programu je definovßna funkce Asc kterß provßdφ p°evod hodnoty znaky na Φφselnou pozici v tabulce. OpaΦnß funkce je Chr, kterß vracφ dle zadanΘho Φφsla odpovφdajφcφ znak z ASCII tabulky:

'program ZNAKY2.BON
Sub Main()
    Writeln(Asc("A"))   'vypφÜe ASCII hodnotu znak znaku 'a'
    Writeln(Asc("a"))   'vypφÜe ASCII hodnotu znak znaku 'A'
    Writeln(Chr(65))    'vypφÜe znak tabulky zadanΘ hodnoty

    For x = 65 to 90
        Write(Chr(x))   'vypφÜe abecedu - velkß pφsmena
    Next
    Writeln("")

    For x = 97 to 122
        Write(Chr(x))   'vypφÜe abecedu - malß  pφsmena
    Next
    Writeln("")
End Sub
VÜimn∞te si, ₧e velkß pφsmena v tabulce zaΦφnajφ na pozici 65 a malß pφsmena na pozici 97, jejich rozdφl je proto 32. To by bylo mo₧nΘ vyu₧φt nap°φklad pro p°evod °et∞zce na malß pφsmena, jak ukazuje nßsledujφcφ p°φklad.

'program ZNAKY3.BON
Sub Main()
    S = "ozOgaN bOnAnZa"
    For X = 1 to Len(S)
       If (Asc(Mid(S,X,1))>=65) and (Asc(Mid(s,x,1))<=90) then
          S = Mid(S, 1, X-1)_
            + Chr(Asc(Mid(S, X, 1))+32)_
            + Mid(S, X+1, Len(S)-X)
       End If
    Next
    Writeln(S)     'vypφÜe "ozogan bonanza"
End Sub
Pro p°evod °et∞zce na velkß pφsmena se pou₧φvß funkce UCase, na malß pφsmena potom funkce LCase. P°evßdφ se znaky vΦetn∞ diakritick²ch znamΘnek:

s := 'ozOgaN kLonDaiK';
Writeln(LowerCase(s)); {p°evede na malß  pφsmena}
Writeln(UpperCase(s)); {p°evede na velkß pφsmena}
Pravd∞podobn∞ velmi Φasto budete pot°ebovat p°evßd∞t Φφsla na °et∞zce a obrßcen∞. JednoduÜÜφ je p°itom p°evod Φφsel na °et∞zec. Pro p°evod Φφsla typy Integer se pou₧φvß funkce CStr. Pokud pot°ebujete p°evΘst Φφslo na °et∞zec se zadßnφm poΦtu desetinn²ch mφst, m∙₧ete pou₧φt dostupnou funkci z jazyka KLONDAIK RealToStr. Ta vßm umo₧nφ zadat nejen dΘlku Φφsla, ale i poΦet desetinn²ch mφst. ╪et∞zec na celΘ Φφslo se p°evßdφ funkcφ CInt. Na Φφslo vΦetn∞ jejφ desetinnΘ Φßsti m∙₧ete p°evΘst °et∞zec funkcemi CDbl, nebo funkcφ CLng. K p°evodu je mo₧nΘ pou₧φt takΘ dostupnΘ funkce jazyka KLONDAIK StrToReal, kdy budou nenumerickΘ znaky ignorovßny.

'program ZNAKY4.BON
Sub Main()
    I = 123
    R = 123.45
    Writeln("Φφslo: "+CStr(I))
    Writeln("Φφslo: "+RealToStr(I,6,2))
    Writeln("Φφslo: "+RealToStr(R,6,2))
    R = StrToReal("123.45")/3
End Sub
Knihovna pro prßci s °et∞zci obsahuje i dalÜφ zajφmavΘ pou₧itelnΘ funkce.
p°edchozφ lekce (1.19) obsah kurzu nßsledujφcφ lekce (1.21)

OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail: info@ozogan.cz