Szukanie tekstu w TMemoryStream

0

Witam.

Pytanie jak w teamcie: jak znaleźć jakiś tekst ale koniecznie zapisany w TMemoryStream.

Dzięki

0

Ja bym powiedział: "tak jak w stringach... odczytujesz, porównujesz, idziesz" ale chyba to nie tak jest w stringach, co?

0

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;

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