Article View: pl.comp.lang.pascal
Article #92635Przydatne - funkcja zwracająca string
From: Andrzej Grażyński
Date: Tue, 07 Oct 2008 09:16
Date: Tue, 07 Oct 2008 09:16
86 lines
2351 bytes
2351 bytes
BP7.
Oto przykład funkcji zwracającej string:
Function BezSpacji(const S:String):String;
var
X: String;
i, K: byte;
begin
K := 0;
For i := 1 to Length(S) do
begin
if S[i] <> ' ' then
begin
Inc(K);
X[K] := S[i];
end;
end;
Byte(X[0]) := K;
BezSpacji := X; { <---- }
end;
albo tak:
Function BezSpacji(S:String):String;
var
i, K: byte;
begin
K := 0;
For i := 1 to Length(S) do
begin
if S[i] <> ' ' then
begin
Inc(K);
S[K] := S[i];
end;
end;
Byte(S[0]) := K;
BezSpacji := S; { <---- }
end;
W obu przypadkach wynik tworzony jest w zmiennej pośredniej, po czym
zmienna ta kopiowana jest do wyniku.
A czy da się operować BEZPOŚREDNIO NA WYNIKU? - w Delphi służy do tego
zmienna Result.
Może nie wszyscy wiedzą, że w BP7 zmienna Result też jest, choć może w
trochę innej formie i trochę inaczej się jej używa:
Function BezSpacji(const S:String):String;
var
i, K: byte;
pS: ^String;
begin
asm
LES DI,@Result
MOV pS.WORD[0],DI
MOV pS.WORD[2],ES
end;
{ Teraz w pS jest wskazanie na wynik }
K := 0;
For i := 1 to Length(S) do
begin
if S[i] <> ' ' then
begin
Inc(K);
pS^[K] := S[i];
end;
end;
Byte(pS^[0]) := K;
end;
Oszczędzamy 256 bajtów na stosie i czas kopiowania stringa.
Technical Details
Message-ID:
<gcf9cs$mtp$1@news.onet.pl>Path:
mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mailReferences:
<20080905121945.03f2cdf2.solaris@be.inspired>Show Full Headers
Complete Article Headers
Path: mbox-mo1.pugleaf.net!news-archive.icm.edu.pl!newsfeed.gazeta.pl!news.onet.pl!not-for-mail From: Andrzej Grażyński <grazynsk@petex.com.pl> Newsgroups: pl.comp.lang.pascal Subject: Przydatne - funkcja zwracająca string Date: Tue, 07 Oct 2008 11:16:05 +0200 Organization: Onet.pl Lines: 90 Message-ID: <gcf9cs$mtp$1@news.onet.pl> References: <20080905121945.03f2cdf2.solaris@be.inspired> NNTP-Posting-Host: rt-bras1.welnowiec.net Mime-Version: 1.0 X-Trace: news.onet.pl 1223370972 23481 83.143.96.27 (7 Oct 2008 09:16:12 GMT) X-Complaints-To: usenet@news.onet.pl NNTP-Posting-Date: Tue, 7 Oct 2008 09:16:12 +0000 (UTC) X-Sender: 2ysppuKZfnIJFd8Xm5/5BA== In-Reply-To: <20080905121945.03f2cdf2.solaris@be.inspired> User-Agent: Thunderbird 2.0.0.17 (Windows/20080914) Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit