2013-04-11 1 views
1

Самый простой способ поиска строки в потоке памяти (и нескольких строк) и возврата true или false?Delphi: Самый простой способ поиска строки в memystream

+3

Использование, например, ['Pos'] (http://docwiki.embarcadero.com/Libraries/XE2/en/System.Pos) и этот [' кусок кода'] (http://stackoverflow.com/a/733322/960757). – TLama

+1

начните с фиксации их с тем же кодированием или кодировкой. То же строковое значение обеспечивает абсолютно разные значения байтов (TMemoryStream) в кодировках UTF-8, UTF-16 и не-Unicode. –

+0

http://en.wikipedia.org/wiki/String_search –

ответ

2
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.

(Пример негерметичен - для краткости я не использовал код для окончательной доработки)

+1

В новых версиях Delphi TStringStream.Create имеет перегрузку, которая принимает TEncoding: http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringStream.Create –

 Смежные вопросы

  • Нет связанных вопросов^_^