Operacje na │a±cuchach

Strona g│≤wna

 

 

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.