🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Article View: pl.comp.lang.pascal
Article #92635

Przydatne - funkcja zwracająca string

#92635
From: Andrzej Grażyński
Date: Tue, 07 Oct 2008 09:16
86 lines
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-mail
References: <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