Podobne

Sample Form :

(…) jak masz dziś wykitować, to dziś wykitujesz, i nie pomoże ci żadna ochrona.
Podobną metodą jest metoda System.IndexOf, która
pozwala dodatkowo na nieco bardziej elastyczne działanie, ponieważ
umożliwia określenie pozycji startowej, od której rozpocząć ma się szukanie.
Alternatywnym rozwiązaniem jest też metoda String.LastIndexOf, która
przeszukuje podany ciąg znaków od tyłu. Obie metody — IndexOf
i LastIndexOf — w przeciwieństwie do funkcji Pos — w przypadku
nieznalezienia szukanego podciągu zwracają wartość -1, a nie 0.
 Delete( s, index, count) — Usuwa count znaków z podanego ciągu znaków s, rozpoczynając od pozycji index. W przeciwieństwie do metody String.Remove, funkcja Delete nie zwraca odpowiednio zmodyfikowanej kopii ciągu znaków,
ale dokonuje modyfikacji bezpośrednio w ciągu znaków przekazanym
w parametrze s.
372
Delphi 2005
 Insert( substr, s, index) — Do ciągu znaków s wstawia na pozycji index dodatkowy ciąg znaków substr. Jej odpowiednikiem jest metoda String.Insert, która jednak nie modyfikuje źródłowego ciągu znaków, ale zwraca ciąg wynikowy.
Z kolei poniższe procedury są całkowicie niezależne od stosowanej metody indeksowania:
 Length( s) — Zwraca długość ciągu znaków liczoną w znakach (odpowiada właściwości String.Length).
 IntToStr( int) i IntToHex( int) — Obie funkcje zamieniają podaną w parametrze liczbę w ciąg znaków zawierający jej reprezentację dziesiętną lub szesnastkową.
W klasie String podobne efekty uzyskać można wywołując metody
Integer( int).ToString lub Integer( int).ToString('X').
 StrToInt( str) — Zwraca liczbę całkowitą tworzoną na podstawie zapisu przekazanego w parametrze str. Jeżeli ciągu znaków str nie da się przekształcić w liczbę, to wywoływany jest wyjątek EConvertError. Biblioteka FCL
udostępnia nieco bardziej złożoną, ale za to bardziej wszechstronną metodę zamiany ciągu znaków str w liczbę całkowitą i, którą przedstawiam na listingu 3.103.
Listing 3.103. Konwersja ciągu znaków na liczbę całkowitą
// Wersja prosta:
i := Int16.Parse(str); // Int16 = klasa środowiska .NET odpowiadająca typowi integer
// Wersja złożona, bardziej ogólna i wszechstronna:
i := Integer(TypeDescriptor.GetConverter(i.GetType).ConvertFromString(str));
 LowerCase i UpperCase — Zamieniają wszystkie litery w ciągu na litery wielkie lub małe i odpowiadają metodom ToLower i ToUpper z klasy String.
Manipulacje na ciągach znaków na poziomie pojedynczych znaków
Funkcją typową dla języka Pascal jest możliwość odwoływania się do poszczególnych znaków w ciągu, tak jakby były one elementami tablicy:
DziesiatyZnak := s[10];
s[9] := DziesiatyZnak;
Te znaki, które leżą poza aktualnym końcem ciągu znaków, mogą być zapisywane dopiero po jawnym powiększeniu długości ciągu znaków. Początkowo ciąg znaków ma dłu-gość zerową, ponieważ w Delphi inicjowany jest ciągiem pustym. Jeżeli teraz chcielibyśmy zapisać piąty znak ciągu, to moglibyśmy to wykonać za pomocą kodu przedstawionego na listingu 3.104.
Listing 3.104. Zapisywanie pojedynczych znaków w ciągu
var
s: String;
begin
// Ciąg znaków s ma długość zerową
SetLenght(s, 5);
// Ciąg znaków s ma długość pięciu znaków
s[5] := NowyZnak;
Rozdział 3. ♦ Język Delphi w środowisku .NET
373
W środowisku .NET takie bezpośrednie manipulacje na pojedynczych znakach ciągu powodują wykonywanie długotrwałych operacji, ponieważ klasa System.String
pochodząca ze środowiska .NET nie pozwala na zmianę swojej zawartości. Z tego wynika, że przedstawiony wyżej kod Delphi zamieniający tylko jeden znak w ciągu powoduje utworzenie całkowicie nowego ciągu znaków, który od poprzedniego cią-
gu znaków różni się tylko jednym, zmienionym w danej instrukcji znakiem. Zmiennej typu string przypisywany jest nowy ciąg znaków, a stary ciąg po pewnym czasie usuwany jest z pamięci przez mechanizm oczyszczania pamięci. Jeżeli chcemy składać dłuższy ciąg znaków z pojedynczych znaków, to powinniśmy skorzystać z klasy StringBuilder oferowanej przez środowisko .NET do takich właśnie operacji. W klasie tej można bezpośrednio zmieniać poszczególne znaki ciągu (poprzez właściwość Chars), a na zakończenie przygotowany ciąg znaków zmienić w faktyczną wartość typu String wywołując metodę ToString.
Ciągi znaków o stałej długości