![]() |
Delphi-Version: -
Pos & PosEx für Streams
Da es doch einige gibt, die nicht so richtig warm werden mit Streams, hier mal 2 Funktionen, die wie Pos und PosEx funktionieren, nur eben mit Streams.
Die sind jetzt mehr für "Dummies" - also nicht auf Performance getrimmt ;) PosStream gibt die erste Position des Suchstrings im Stream zurück. PosExStream gibt die Position des ersten Vorkommens zurück, nach der übergebenen Position. Die zurückgegebene Position ist nullbasiert (wie im Stream) - falls nicht gefunden wird -1 zurückgegeben. Es wird dringend empfohlen, einen gepufferten Stream zu verwenden ;)
Delphi-Quellcode:
function PosStream(const Stream: TStream; needle: String) : Int64;
begin Result := PosExStream(Stream, needle, -1); end; function PosExStream(const Stream: TStream; needle: String; position: Int64) : Int64; var i: Integer; pos: Int64; pattern: String; begin Stream.Position := position + 1; setlength(pattern, length(needle)); while (Stream.size - Stream.Position) >= length(needle) do begin pos := Stream.Position; Stream.ReadBuffer(pattern[1], length(needle)); if comparemem(@pattern[1], @needle[1], length(needle)) then begin Result := pos; exit; end; Stream.position := pos + 1; // Wir müssen byteweise vorgehen end; Result := -1; end; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:38 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz