CYFROWY BARON • PROGRAMOWANIE • Zobacz wątek - TStrings i białe znaki

TStrings i białe znaki

dział ogólny

TStrings i białe znaki

Nowy postprzez duf » poniedziałek, 20 sierpnia 2012, 12:11

KOD cpp:     UKRYJ  
TStrings* plik = new TStringList;
plik->Text = "a";
plik->Text = plik->Text + "b";
ShowMessage( plik->Text );
ShowMessage( plik->Text.Length() );
 

Proszę o wytłumaczenie dlaczego:
1. w ShowMessage widzę litery jedna pod drugą czyli litera 'a' posiada znak nowej linii
a
b

2. Długość tekstu 'plik->Text' wynosi 6 znaków skoro są tylko dwa znaki
Czy jest możliwe żeby plik->Text zawierał tylko tekst 'ab' w przypadku łączenia jak w przykładzie?
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: TStrings i białe znaki

Nowy postprzez Mironas » poniedziałek, 20 sierpnia 2012, 12:32

TStrings na końcu ostatniego wiersza zawsze dodaje 'znak końca wiersza'. Taki znak wg standardu Windows to tak naprawdę dwa znaki: \r oraz \n (dec: 13 10, hex: 0D 0A) czyli powrót karetki i następny wiersz. Jeśli dajesz:
KOD cpp:     UKRYJ  
plik->Text = "a";

to zawartość 'plik->Text' będzie zawierać 3 znaki:
a\r\n

Jeśli do tego dodajesz:
KOD cpp:     UKRYJ  
plik->Text = plik->Text + "b";

to zawartość 'plik->Text' wygląda następująco:
a\r\n
b\r\n

czyli razem 6 znaków.

Jeśli chcesz zmodyfikować wybrany wiersz to powinieneś użyć 'Strings[x]' ('x' to numer wiersza liczony od zera):
KOD cpp:     UKRYJ  
String wiersz = plik->Strings[x];
wiersz = wiersz.SubString(1, wiersz.Length()-2);  // obcięcie dwóch ostatnich znaków
plik->Strings[x] = wiersz + "b";
 

Za ten post autor Mironas otrzymał podziękowanie od:
duf
Avatar użytkownika
Mironas
Programista I
Programista I
 
Posty: 427
Dołączył(a): poniedziałek, 2 stycznia 2012, 19:02
Podziękował : 17
Otrzymał podziękowań: 61
System operacyjny: Windows 10
Kompilator: C++Builder 10.3 Rio
TMS Components Pack
Gadu Gadu: 0
    Windows XPChrome

Re: TStrings i białe znaki

Nowy postprzez duf » poniedziałek, 20 sierpnia 2012, 12:44

wiersz = wiersz.SubString( 1, wiersz.Length() );
Dzięki. ale Dopiero teraz jest samo 'a'
Avatar użytkownika
duf
Intelektryk
Intelektryk
 
Posty: 175
Dołączył(a): czwartek, 9 października 2008, 13:02
Podziękował : 17
Otrzymał podziękowań: 2
System operacyjny: Windows 10
Kompilator: XE8
Gadu Gadu: 0
    Windows XPFirefox

Re: TStrings i białe znaki

Nowy postprzez Cyfrowy Baron » poniedziałek, 20 sierpnia 2012, 16:08

Można też posłużyć się funkcją Trim do obcinania białych znaków:

KOD cpp:     UKRYJ  
TStrings *plik = new TStringList;

plik->Text = "a";
plik->Text = plik->Text.Trim() + "b";


ShowMessage( plik->Text.Trim() );
ShowMessage( plik->Text.Trim().Length() );

Za ten post autor Cyfrowy Baron otrzymał podziękowanie od:
duf
Avatar użytkownika
Cyfrowy Baron
Administrator
Administrator
 
Posty: 4716
Dołączył(a): niedziela, 13 lipca 2008, 15:17
Podziękował : 12
Otrzymał podziękowań: 442
System operacyjny: Windows 7 x64 SP1
Kompilator: Embarcadero RAD Studio XE2
C++ Builder XE2 Update 4
SKYPE: cyfbar
Gadu Gadu: 0
    Windows XPFirefox


  • Podobne tematy
    Odpowiedzi
    Wyświetlone
    Ostatni post

Powrót do Ogólne problemy z programowaniem

Kto przegląda forum

Użytkownicy przeglądający ten dział: Brak zalogowanych użytkowników i 3 gości