Operacje na │a±cuchach
W tym artykule om≤wiΩ funkcjΩ operuj▒ce na tek╢cie. BΩd▒ one
umo┐liwia│y takie operacje jak dodawanie w wybrane pozycje jakich╢
znak≤w, odnajdywanie okre╢lonych wyraz≤w itp.
Na pocz▒tek polecenie Concat umo┐liwiaj▒ce po│▒czenie
okre╢lonych wyraz≤w ( blok≤w ). Polecenie to jest bardzo ┐ako stosowane
bo zastΩpuje ono czΩ╢ciej u┐ywany operator + s│u┐▒cy w│a╢nie do
│▒czenia znak≤w. Oto przyk│ad:
var
S: String;
begin
S := ' 14 kwietnia ';
ShowMessage(
Concat('Dzisiaj jest', S, 'roku 2001'));
Nic nadzwyczajnego. :)
Kolejne bardzo przydatne polecenie to Pos. Ot≤┐ umo┐liwia ono
przeszukiwanie okre╢lonego ci▒gu znak≤w w jakiej╢ zmiennej
tekstowej. Przyk│adowo chcia│by╢ w jakiej╢ zmiennej odnale╝µ
spacje.
var
S : String;
begin
S := 'Tekst zawieraj▒cy spacje';
if Pos(' ', S) > 0 then
ShowMessage('W zmiennej znajduj▒ siΩ spacje...');
W poleceniu Pos pierwszym parametrem jest szukany znak, a
drugim ╝r≤d│o poszukiwa±, czyli jak w naszym przyk│adzie zmienna
"S". W powy┐szym przyk│adze program poszukuje spacji w
zmiennej. Je┐eli znajdzie wiΩcej ni┐ 0 to wy╢wietla komunikat.
Polecenie Pos u┐ywa siΩ czΩsto w po│▒czeniu z innymi - poka┐emy
to dalej...
Kolejne polecenie s│u┐y do usuwania okre╢lonego ci▒gu znak≤w ze
zmiennej. Jest to polecenie Delete. Pierwszym jej parametrem jest
zmienna, kt≤rej dotyczyµ bΩdzie operacja, drugim od jakiego miejsca w
zmiennej bΩdzie dotyczyµ usuwania, a ostatni parametr to ilo╢µ znak≤w
do usuniΩcia:
var
S : String;
begin
S := 'Adres strony: http://www.programowanie.of.pl';
Delete(S, 14, 8);
ShowMessage(s);
Powy┐sza procedura wy╢wietli jedynie napis www.programowanie.of.pl
[ bez http:// ]. Gdy ju┐ wiesz o co chodzi w poleceniu Delete
oraz Pos mo┐na napisaµ procedurΩ usuwaj▒c▒ wszystkie spacje
w zmiennej:
var
S : String;
begin
S := 'Tekst zawieraj▒cy spacje';
while Pos(' ', S) > 0 do
Delete(S, Pos(' ', S), 1);
ShowMessage(S);
Powy┐sze komendy usun▒ wszystkie spacje w zmiennej i ponownie wy╢wietl▒
stringa. Zastosowanie tutaj pΩtli spowoduje, ┐e na pewno wszelkie
spacje zostan▒ usuniΩte.
Skoro jest funkcja obs│uguj▒ca usuwanie ci▒g≤w to jest tak┐e
funkcja umo┐liwiaj▒ca ich wstawianie, prawda? Nie mylisz siΩ. Ta
funkcja to Insert. Parametry s▒ w niej trochΩ pomieszane
dlatego, ┐e pierwszym parametrem tej funkcji jest ci▒g znak≤w, kt≤ry
ma byµ wstawiony, drugim jest ╝r≤d│o operacji, czyli zmienna, kt≤rej
dotyczyµ bΩdzie operacja, a ostatni - trzeci parametr to znak od kt≤rego
zaczynaµ siΩ bΩdzie operacja dodawania ci▒gu:
var
S : String;
begin
S := 'Adres strony: www.programowanie.of.pl';
Insert('http://', S, 15);
ShowMessage(s);
Jest jeszcze jendo polecenie - Copy. S│uzy ono do kopiowania czΩ╢ci
znak≤w ze zmiennej. Look:
var
S, Finall : String;
begin
S := 'Adres strony: www.programowanie.of.pl';
Finall := Copy(S, 1, 6) + 'e-mail:
boduch@poland.com';
ShowMessage(Finall);
Mamy sobie dwa stringi. Teraz do drugiego kopiujemy kawalek tekstu z
pierwszego. W poleceniu Copy pierwszym parametrem musi byµ ╝r≤d│o
wykonywanej operacji, drugi parametr to miejsce od kt≤rego bΩdzie siΩ
zaczyna│a operacja kopiowania, a ostatni to ilo╢µ znak≤w do
skopiowania.
Istniej▒ jeszcze mniej przydatne polecenia - np: StringOfChar. Nie
robi ono nic specjalnego. Wpisz do programu taki kod:
ShowMessage(
StringOfChar('A', 5));
a zobaczysz piΩµ liter A.
Jeszcze jedno - obcinanie spacji na pocz▒tku i na ko±cu stringa:
var
S : String;
begin
S := ' Adam Boduch ';
ShowMessage(Trim(S));
Konwersja znak≤w na du┐e/ma│e litery to kolejne dwa polecenia:
UpperCase, LowerCase.
ShowMessage(UpperCase('www.programowanie.of.pl'));
ShowMessage(LowerCase('BODUCH@POLAND.COM'));
Ostatnia tak┐e do╢µ czΩsto u┐ywana - obliczanie ilo╢ci znak≤w
w stringu:
var
S : String;
begin
S := 'Delphi';
Length(S);
My╢lΩ, ┐e dobrym podsumowaniem tego co dotychczas zrobili╢my bΩdzie
program, kt≤ry 'wygrzebie' ze stringa adres e-mail:
var
sText : String;
Email : String;
ToStart, ToEnd : Integer;
begin
sText := 'M≤j e-mail to: boduch@poland.com';
ToEnd := Pos('@', sText);
ToStart := ToEnd;
if ToEnd > 0 then
begin
repeat
Dec(ToStart);
until (not (sText[ToStart] in
['a'..'z','A'..'Z','0'..'9','-','_','.']));
EMail := Copy(sText, ToStart,
ToEnd);
end;
ShowMessage(EMail);
Budowa nie jest zbyt skomplikowana. Na pocz▒tek program w zmiennej
odnajduje znak ma│py, a p≤╝niej 'cofa siΩ' w zmiennej a┐ napotka
znak spacji - oznacza koniec adresu e-mail.