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 apostrofy.

Unit prg;
interface
implementation

Var s : string;
    c : Char;
begin
   s := 'OZOGAN KLONDAIK';
   c := 'K';
end;
end.
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 Length:


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

Writeln(Copy('KLONDAIK',2,3)); {vypφÜe 'LON'}
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 se pou₧φvß procedura Delete, kterß ze zadanΘho °et∞zce zruÜφ od zadanΘ pozice zadan² poΦet znak∙. Naopak, procedura Insert vlo₧φ na zadanou pozici do °et∞zce po₧adovan² pod°et∞zec. Ob∞ funkce m∞nφ souΦasn∞ dΘlku °et∞zce.

Unit znaky1;
interface
implementation

Var s : String;
begin
   s := 'Program OZOGANKLONDAIK';
   Writeln('DΘlka °et∞zce: '+IntToStr(Length(s)));
   s := Insert('*', s, 15); {vlo₧φ znaky do °et∞zce}
   Writeln(s);
   s := Delete(s, 1, 8);    {vyjme znaky z °et∞zce}
   Writeln(s);              {vypφÜe: 'OZOGAN*KLONDAIK'}
   Writeln('DΘlka °et∞zce: '+IntToStr(Length(s)));
end;
end.
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 KLONDAIK';
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 Ord 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:

Unit Znaky2;
interface
implementation

Var x : Integer;

begin
   Writeln(Ord('A'));  {vypφÜe ASCII hodnotu znak znaku 'a'}
   Writeln(Ord('a'));  {vypφÜe ASCII hodnotu znak znaku 'A'}
   Writeln(Chr(65));   {vypφÜe znak tabulky zadanΘ hodnoty}

   For x:= 65 to 90 do
       Write(Chr(x));  {vypφÜe abecedu - velkß pφsmena}
   Writeln();

   For x:= 97 to 122 do
       Write(Chr(x));  {vypφÜe abecedu - malß pφsmena}
   Writeln();
end;
end.
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.

Unit Znaky3;
interface
implementation

Var s : String;
    x : Integer;
begin
   s := 'ozOgaN kLonDaiK';
   For x := 1 TO Length(s) do
   begin
      If (Ord(Copy(s,x,1))>=65) and (Ord(Copy(s,x,1))<=90) then
         s := Copy(s,1,x -1)
           + Chr(Ord(Copy(s,x,1))+32)
           + Copy(s, x+1,Length(s)-x)
   end;
   Writeln(s);  {vypφÜe 'ozogan klondaik'}
end;
end.
Pro p°evod °et∞zce na velkß pφsmena se pou₧φvß funkce UpperCase, na malß pφsmena potom funkce LowerCase. 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 IntToStr. Tato funkce nedokß₧e p°evΘst desetinnou Φßst Φφsla. K tomu se pou₧φvß funkce RealToStr, kterß vßm umo₧nφ zadat nejen dΘlku Φφsla, ale i poΦet desetinn²ch mφst. ╪et∞zec na Φφslo je nejvhodn∞jÜφ p°evßd∞t funkcφ StrToReal. NenumerickΘ znaky budou p°itom ignorovßny. Pro p°φpadnΘ zjiÜt∞nφ nenumerickΘho znaku v °et∞zci m∙₧ete pou₧φt funkci Val.

Unit Znaky4;
interface
implementation

Var i : Integer;
    r : Real;
    s : String;
begin
   i := 123;
   r := 123.45;
   Writeln('Φφslo:'+IntToStr(i));      {vypφÜe 'Φφslo: 123'}
   Writeln('Φφslo:'+RealToStr(i,6,2)); {vypφÜe 'Φφslo: 123.00'}
   Writeln('Φφslo:'+RealToStr(r,6,2)); {vypφÜe 'Φφslo: 123.45'}
   r := StrToReal('123.45')/3;         {p°evede °et∞zec na Φφslo}
end;
end.
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