Obsługa wierszy tekstu
Języki programowania - C++
Marzena Nowakowska
Wydział Zarządzania i Modelowania
Komputerowego
Politechnika Świętokrzyska
Plan wykładu
Tablica znaków
Klasa AnsiString
Wybrane metody klasy AnsiString
Konwersja typów w klasie AnsiString
Operacje na obiektach klasy AnsiString
Komponent typu TMemo
Klasa TStrings i dostęp do tekstów w tej
klasie
Tablica znaków
Deklarowanie tablicy znakowej:
char
identyfikator[liczba_elementów];
Przykład:
char tablica[30];
Inicjowanie tablicy znaków
:
char tekst0[15] = {'6', '7', '&', '8‘, '9', '0', '&', '^',
'%', '=', '|‘, 'a‘};
char tekst1[15] = "67&890&^% =|a";
char tekst2[] = "67&890&^% =|a";
tekst1 -> 6 7 & 8 9 0 & $ % = |
a \0 ?
?
tekst2 -> 6 7 & 8 9 0 & $ % =
|
a
\0
W BCB zamiast tablic znakowych używa się danych klasy AnsiString
Klasa AnsiString
Konstruktory
:
AnsiString()
AnsiString napis1; AnsiString napis2=“to jest napis”;
AnsiString(const char* src)
char napis3[]=“A to inny napis”; // inicjowanie tablicy
AnsiString napis4(napis3);
AnsiString(const char* src, unsigned char len)
AnsiString napis5(napis3, 4); //
->“A to”
AnsiString(int src)
AnsiString napis6(10); //
-> “10”
AnsiString(double src)
AnsiString napis7(10.15); // -> “10.15”
Wybrane metody klasy
AnsiString
• double ToDouble()
• int ToInt()
• AnsiString LowerCase(), AnsiString UpperCase()
• int AnsiCompare(const AnsiString& rhs)
• char* AnsiLastChar()
• void Insert(const AnsiString& str, int index)
• bool IsEmpty()
• AnsiString StringOfChar(char ch, int count)
• AnsiString TrimLeft(), AnsiString TrimRight(),
AnsiString Trim()
• int Length()
• int AnsiPos(const AnsiString& subStr)
• AnsiString SubString(int index, int count)
Uwaga: kolejne elementy tekstu w obiekcie AnsiString są numerowane od 1
Konwersja typów w klasie
AnsiString
Podano uproszczone definicje prototypów
• double ToDouble()
• int ToInt()
• char* c_str()
• AnsiString FloatToStrF(long double value,
TStringFloatFormat format, int precision, int
digits);
wybrane stałe predefiniowane dla parametru
format: sffGeneral , sffFixed, sffCurrency
Przykłady:
double a; int i; char znaki[10];
AnsiString AA, II, ZNAKI;
AA=”123.094”; a=AA.ToDouble();
II=”123”; i=II.ToInt();
ZNAKI=”tekst”; strcpy(znaki, ZNAKI.c_str());
AA.FloatToStrF(22.55, sffFixed, 6,2);
Przykłady wykorzystania
metod klasy AnsiString
Przeładowane operatory:
!=
,
= =
,
<
,
<=
,
>
,
>=
,
+
,
+=
AnsiString tekst, fragment_tekstu;
int nr_sep, dlugosc;
tekst=”Janko Muzykant; 55.5”;
nr_sep=tekst.AnsiPos(";");
dlugosc=tekst.Length()-nr_sep;
fragment_tekstu =
tekst.SubString(nr_sep+1,dlugosc);
fragment_tekstu = fragment_tekstu.Trim();
Komponent typu
TMemo
• Użyteczne właściwości
Alignment
:
taLeftJustify, taRightJustify, taCenter
ScrollBars:ssNone, ssHorizontal, ssVertical, ssBoth
WordWrap
:
true, false
Lines
- obiekt typu
TStrings *
• Wybrane metody:
SetAlignment
,
SetScrollBars
,
SetWordWrap
,
SetFocus
TCustomEdi
t
TCustomMe
mo
TMemo
Obiekt klasy TMemo jest komponentem
wizualnym, który umożliwia wprowadzania lub
wyświetlania wielu wierszy tekstu. Dostęp do
zbioru wierszy odbywa się za pośrednictwem
właściwości Lines
Klasa TStrings
TStrings jest klasa bazową dla obiektów, które
reprezentują kolekcję łańcuchów (tekstów). Klasa jest
zdefiniowana do zarządzania „listą łańcuchów” czyli
zbiorem wierszy tekstu.
Klasa wprowadza właściwości i metody aby: dodawać do
lub usuwać z określonego miejsca w tekście łańcuchy,
zmieniać położenie łańcuchów w tekście, mieć dostęp
do określonej pozycji łańcucha, dokonywać transmisji
łańcuchów do lub z pliku
nr_sep= Memo1->Lines->Strings[0].AnsiPos(";");
dlugosc= Memo1->Lines->Strings[0].Length()-nr_sep ;
ocena= Memo1->Lines-
>Strings[0].SubString(nr_sep+1,dlugosc);
Klasa TStrings
• Wybrane właściwości:
int Capacity
wskazuje liczbę wierszy jaką może przechować obiekt TStrings.
int Count
informuje o liczbie wierszy zapisanych w obiekcie TStrings.
AnsiString Strings[int Index]
tablica identyfikująca kolejne wiersze; odwołanie do łańcucha o
określonym numerze jest realizowane poprzez indeks tablicy
Strings, poczynając od elementu o numerze 0, np.
dane->Lines-
>Strings[i]
• Wybrane metody
int Add(const AnsiString S)
dodaje łańcuch na końcu tekstu w obiekcie i zwraca jego
indeks.
void AddStrings(TStrings* Strings)
dodaje zbiór łańcuchów do listy.
void Clear(void)
usuwa (czyści) wszystkie łańcuchy na liście.
void Delete(int Index)
usuwa łańcuch o podanym numerze z listy (pierwszy łańcuch
ma numer 0).
Obsługa tekstu w klasie
TStrings
Odwołanie do wiersza elementu dane wskazującego na obiekt klasy
TMemo w formularzu jest następujące:
dane->Lines->Strings[i]
• dane
jest wskazaniem do obiektu typu TMemo, dlatego jego
właściwość
Lines
jest wybrana selektorem pośrednim (strzałka): ->
• dane->Lines
jest elementem typu TStrings *, dlatego właściwość
Strings klasy TStrings jest wybrana selektorem pośrednim
(strzałka): ->.
• Właściwość Strings jest kolekcją (tablicą) obiektów klasy
AnsiString, dlatego należy wybrać jeden element tej tablicy
wskazując na jego indeks:
dane->Lines->Strings[i]
• dane->Lines->Strings[i]
jest obiektem klasy AnsiString dlatego
wykorzystanie właściwości tej klasy na rzecz ww. obiektu odbywa
się poprzez selektor bezpośredni (kropka): .
• Przykład (jaki będzie wynik?):
dane->Lines->Strings[i].ToDouble()