Самый простой способ поиска строки в потоке памяти (и нескольких строк) и возврата true или false?Delphi: Самый простой способ поиска строки в memystream
ответ
var ms:TMemoryStream;
strS:TStringStream;
aStr:string;
aPos:integer;
found:boolean;
begin
ms:=TMemoryStream.Create;
ms.LoadFromFile('c:\aFile.txt');
strS:=TStringStream.Create;
strS.LoadFromStream(ms);
aPos:=pos(aStr,strS.dataString);
found:=aPos>0;
end;
TStringStream это часто forgetten, но очень полезный инструмент - легче и безопаснее, чем возиться с pChars и т.д.
Для множественных запросов, либо ackwardly петлю с помощью поз, подстроки и т.д., или использовать RegEx.
Этот код отлично работает в Delphi XE, хотя TStringStream очень старый - не уверен, что он совместим с Unicode.
(Пример негерметичен - для краткости я не использовал код для окончательной доработки)
В новых версиях Delphi TStringStream.Create имеет перегрузку, которая принимает TEncoding: http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringStream.Create –
Использование, например, ['Pos'] (http://docwiki.embarcadero.com/Libraries/XE2/en/System.Pos) и этот [' кусок кода'] (http://stackoverflow.com/a/733322/960757). – TLama
начните с фиксации их с тем же кодированием или кодировкой. То же строковое значение обеспечивает абсолютно разные значения байтов (TMemoryStream) в кодировках UTF-8, UTF-16 и не-Unicode. –
http://en.wikipedia.org/wiki/String_search –