Lekce 1.20
Knihovna pro zpracovßnφ °et∞zc∙
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.
OZOGAN, 1 Mßje 97, 460 01 Liberec
tel.,fax: (048) 52 28 338, e-mail:
info@ozogan.cz