On Thu, 20 Apr 2023 08:40:48 +0200 (CEST), Michael Van Canneyt via fpc-pascal <fpc-pascal@lists.freepascal.org> wrote:
>> I found this page: >> https://www.freepascal.org/docs-html/rtl/system/copy.html >> >> Here there is also reference to the other functions for strings: >> Delete (string and dyn array) >> Copy (string and dyn array) >> Insert (string and dyn array but limited to 255 elements, why?) >> Pos (string only..) >> >> They describe what can be done with strings and in some cases dynamic arrays >> (like TBytes?), but for Pos() there is only string... >> >> And Insert seems to have a limit of 255 elements, why? >> >> What I need is a Pos(token) for TBytes where the token can be a single or >> multiple bytes in size (just like for strings). >> >> Is there such a thing? > >Not that I am aware of, but I think it would be a welcome addition to one of >the RTL units. I've been in need of such a function on multiple occasions, >and had to resort to custom code each time. > FWIW, I threw together two overloaded Pos functions for a TBytes container like this (except I didn't name them Pos in order not to interfere with the RTL): function PosInBytes(const Pattern, Target: TBytes): integer; overload; function PosInBytes(const Pattern: byte; const Target: TBytes): integer; overload; implementation function PosInBytes(const Pattern, Target: TBytes): integer; var i, j, res: integer; begin Result := -1; for i := 0 to Length(Target) - 1 - Length(Pattern) do begin if Target[i] = Pattern[0] then //First byte of pattern found begin res := i; for j := 1 to Length(Pattern)-1 do begin if Target[i+j] <> Pattern[j] then begin res := -1; break; end; end; if res >= 0 then break; end; end; Result := res; end; function PosInBytes(const Pattern: byte; Target: TBytes): integer; var i: integer; begin Result := -1; for i := 0 to Length(Target) - 1 do begin if Target[i] = Pattern then begin Result := i; break; end; end; end; -- Bo Berglund Developer in Sweden _______________________________________________ fpc-pascal maillist - fpc-pascal@lists.freepascal.org https://lists.freepascal.org/cgi-bin/mailman/listinfo/fpc-pascal