[Delphi] Ró?żnice pomiędzy Delete a Copy

0

Pam tablicę Optio w której poukładane są zmienne typu string.
Dla poprawności działania programu chciałem przed wyświetleniem z kazdego pobranego z tabicy ciągu usunąć pierwszych 15 znaków, korzystając z Delete:

Var
TSplit = array of string
Optio,Etykieta: TSplit;
calosc,reszta:string;
p:integer

begin
calosc := Optio[p];
reszta := delete(całość,1,15);
Etykieta[p].Caption := reszta;
end;

Niestety, kompilator dochodząc do tego wiersza buntuje się ,mówiąc o niekompadybilności typó string oraz "procedure'.
Działą natomiast znakomicie w tej postaci (cały ciąg nie przekracza nigdy 30 znaków):

begin
calosc := Optio[p];
reszta:= Copy(calosc,15,30);
Etykieta[p].Caption := reszta;
end;

Wiem ,ze pytanie jest teoretyczne ale dlaczego z obu instrukcji działających na stringach, jedna zgłasza błąd niekompatybilności a druga nie?

0

Pierwsze pytanie podaj definicję TSplit. Moje delphi nie posiada takiej klasy a mam Ent'a.
Drgugie czemu raz stosujesz forme tsplit[] a innym razem tsplit[].caption [???] Aczkolwiek to pewnie sie wyjasni jak odpowiesz na pierwsze pytanie.

PS. Zmodydfikuj code na delphi

0

Pierwsze pytanie podaj definicję TSplit.

coś źle zadziałał tag ' ' i dlatego pewnie umknęło Twojej uwadze-
(poza tym opuściłem słowo type) :

TSplit = array of String

Poza tym procedura jest troszeczkę wyrwana z kontekstu i dlatego np nie widać tu określeń długości tablic dynamicznych.

Drgugie czemu raz stosujesz forme tsplit[] a innym razem tsplit[].caption [???]

Sorry, to moje przeoczenie przy pisaniu postu( w programie jest OK)
Powinno być :

Etykieta : array of TLabel

0

w delphi jest tak, że :
Delete(s : string, Index, Count : integer);
to jest procedura a nie funkcja więc nie zwraca rezultatu. po zastosowaniu tej procedury string (w Twoim kodzie bedzie to 'calosc') zostanie obcięty o Count (u Ciebie - '15') znaków od pozycji Index (u Ciebie - '1'). Tak więc kod będzie wyglądał następująco:

Var
TSplit = array of string
Optio,Etykieta: TSplit;
calosc:string;
p:integer

begin
calosc := Optio[p];
delete(całosc,1,15);
Etykieta[p].Caption := calosc;
end;

0

Wszystko byłoby ok tyle tylko że etykieta to wg ciebie array of tlabel a w przykładzie jest to array of string.

Type
TSplit = array of string
TEtykieta = array of TLabel;
Var
Optio: TSplit;
Etykieta:TEtykieta;
calosc:string;
p:integer

begin
calosc := Optio[p];
delete(całosc,1,15);
Etykieta[p].Caption := calosc;
end;

PS to już jest tak jak ja to widzę (czyli poprawione).

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