2013-04-11 2 views
1

메모리 스트림 (및 여러 문자열)에서 문자열을 검색하고 true 또는 false를 반환하는 가장 쉬운 방법은 무엇입니까?Delphi : memorystream에서 문자열을 검색하는 가장 쉬운 방법

+3

예 : ['Pos'] (http://docwiki.embarcadero.com/Libraries/XE2/en/System.Pos) 함수와 this ['piece of code'] (http://stackoverflow.com/a/733322/960757)). – TLama

+1

같은 인코딩 또는 charset을 갖도록 수정하는 것으로 시작하십시오. 동일한 문자열 값은 UTF-8, UTF-16 및 비 유니 코드 인코딩의 절대적으로 다른 바이트 값 (TMemoryStream)을 제공합니다. –

+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는 종종 잊혀지하지만 매우 유용한 도구입니다 - PChars를 덤비는 것보다 쉽고 안전 등 여러 검색어

, POS를 사용하거나 ackwardly 루프, 문자열, 등 또는 정규식을 사용합니다.

이 코드는 Delphi XE에서 잘 작동하지만 TStringStream은 매우 오래되었습니다. 유니 코드 호환인지 확실하지 않습니다.

(예는 누설 적입니다 - 간결성을 위해 마무리 코드를 생략했습니다)

+1

최신 Delphi 버전에서는 TStringStream.Create에 TEncoding을 허용하는 오버로드가 있습니다. http://docwiki.embarcadero.com/Libraries/XE2/en/System.Classes.TStringStream.Create –

관련 문제