Witam.
Pytanie jak w teamcie: jak znaleźć jakiś tekst ale koniecznie zapisany w TMemoryStream.
Dzięki
Witam.
Pytanie jak w teamcie: jak znaleźć jakiś tekst ale koniecznie zapisany w TMemoryStream.
Dzięki
Ja bym powiedział: "tak jak w stringach... odczytujesz, porównujesz, idziesz" ale chyba to nie tak jest w stringach, co?
Nie jest to może genialne, ani tym bardziej optymalne, ale "na oko" działa:
function PosInMemoryStream( Stream: TMemoryStream; const SubStr: string) :integer;
var iStrLen: integer;
pTekst: PChar;
iCurPos: integer;
iSubPos: integer;
begin
result:=-1;
If not Assigned( Stream ) then exit;
iStrLen:= Length( SubStr );
if (Stream.Size < iStrLen) or (iStrLen < 1) then exit;
pTekst:= PChar(Stream.Memory);
for iCurPos:= 1 to Stream.Size do
if pTekst[iCurPos - 1] = SubStr[1] then
begin
for iSubPos:=iCurPos+1 to iCurPos+iStrLen-1 do
if pTekst[iSubPos - 1] = SubStr[iSubPos - iCurPos + 1] then result:= iCurPos -1
else
begin
result:= -1;
break;
end;
if result <> -1 then exit;
end;
end;