Porownanie 2 stringow

0

Niby prosta sprawa ale nie wiem czy mam gdzies o jedna spacje za duzo czy co sie dzieje ... mianowicie mam 2 stringi. String "gg" ktory ma jakis tam numer powiedzmy 1111 i string "jakinumer" ktory ma teoretycznie miec ta sama wartosc. W richedit pisze sobie np. cos takiego:
user@user:1111
i daje np. buttonowi taka procke:

acces:= Copy(Form1.RichEdit1.Lines.Text, 0, Pos(':',Copy(Form1.RichEdit1.Lines.Text, 0,Length(Form1.RichEdit1.Lines.Text))) -1);

dzieki niej w zmiennej acces mam user@user (i to dziala dobrze)
natomiast poźniej pisze cos takiego:

jakinumer:= Copy(Form1.RichEdit1.Lines.Text,length(acces)+2, Length(Form1.RichEdit1.Lines.Text));
delete(jakinumer,Length(jakinumer)-3,3);
if gg=jakinumer then
showmessage('dziala');

i to jak widac ma pobrać tekst po : jednak nie dzieje sie tak do konca ponieważ nie pokazuje sie komunikat "dziala"

Za pomoc z góry dzięki.

0

Nie napisze dokładnie jak to zrobić, ale polece moje "metody badawcze"

ShowMessage(gg);
ShowMessage(jakinumer);

I już możesz wiedzieć, gdzie zrobiłeś błąd :)

0

No własnie ja tez takie metody badawcze uzywam no i vizualniej jest wszytsko ok, aczkolwiek nie wiem czy np. z tyłu nie ma siakiejs spacji ...

0

W takim razie polecam wzbogacić się o:

ShowMessage('|' +gg +'|');
ShowMessage('|'+ jakinumer +'|');

:)

0

Sprawa jest bardzo prosta. Jak można zauważyć funkcje copy, delete, pos używane są do operacji na stringach. A jak każdy wie zerowy bajt stringa przechowuje jego długość (dlatego np gdy używasz funkcji pos i jeżeli nie znajdzie ona szukanego wyrażenia to zwraca 0).
Ty każesz Delphiemu kopiować string właśnie od 0, co jest błędem. Sam kiedyś miałem z tym problemu, ale teraz mam już troszkę większe odświadczenie :P. Tak więc spróbuj wszystkie 0 zamienić na 1 i powinno działać.
powodzenia.

0

A jak każdy wie zerowy bajt stringa przechowuje jego długość

Nieprawda: tak jest tylko w ShortString, ktorych w Delphi rzadko sie uzywa...

Tak więc spróbuj wszystkie 0 zamienić na 1 i powinno działać.
powodzenia.

Ale tu racja, bo wszystkie stringi sa indeksowane od 1.

Patrz też:
http://4programmers.net/Forum/viewpost.html?id=76346

0

Nieprawda: tak jest tylko w ShortString, ktorych w Delphi rzadko sie uzywa...

No jasne, np w PChar bajty przechowują dane od 0, ale mnie tu chodziło o zwykłego stringa w Delphi

var
zmienna:string;

0

No jasne, np w PChar bajty przechowują dane od 0, ale mnie tu chodziło o zwykłego stringa w Delphi

var
zmienna:string;

I właśnie ten zwykły nie przechowuje w 0 bajcie (jak napisał pq).
Jak w jednym bajcie zmieścisz długość stringa, który ma np. milion znaków? A zapisać się da.
string = AnsiString
AnsiString to jedynie wskaźnik do miejsca w pamięci, gdzie zaczyna się tekst (tak jak PChar), a długość jest przechowywana przed tym miejscem i jest to liczba typu DWORD (oprócz tego jeszcze licznik referencji).
A string o jakim piszesz to jest ShortString. Używany głównie w TP. Tutaj jest to jedynie jak zadeklarujesz tak:
zmienna: ShortString;
lub
zmienna: string[20];
lub
{$H-}
zmienna: string;

Polecam wskazany przez pq link.

1 użytkowników online, w tym zalogowanych: 0, gości: 1