StrUtils.SearchBuf을 [soWholeWord,soDown]
옵션으로 테스트 할 때 예기치 않은 결과가 발생했습니다.SearchBuf 예기치 않은 출력
program Project1;
Uses
SysUtils,StrUtils;
function WordFound(aString,searchString: String): Boolean;
begin
Result := SearchBuf(PChar(aString),Length(aString), 0, 0, searchString,
[soWholeWord,soDown]) <> nil;
end;
Procedure Test(aString,searchString: String);
begin
WriteLn('"',searchString,'" in "',aString,'"',#9,' : ',
WordFound(aString,searchString));
end;
begin
Test('Delphi','Delphi'); // True
Test('Delphi ','Delphi'); // True
Test(' Delphi','Delphi'); // False
Test(' Delphi ','Delphi'); // False
ReadLn;
end.
왜 ' Delphi'
하고 ' Delphi '
은 전체 단어로 간주되지?
역방향 검색은 어떻게됩니까?
function WordFoundRev(aString,searchString: String): Boolean;
begin
Result := SearchBuf(PChar(aString),Length(aString),Length(aString)-1,0,searchString,
[soWholeWord]) <> nil;
end;
Procedure TestRev(aString,searchString: String);
begin
WriteLn('"',searchString,'" in "',aString,'"',#9,' : ',
WordFoundRev(aString,searchString));
end;
begin
TestRev('Delphi','Delphi'); // False
TestRev('Delphi ','Delphi'); // True
TestRev(' Delphi','Delphi'); // False
TestRev(' Delphi ','Delphi'); // True
ReadLn;
end.
나는이 사실을 전혀 알지 못합니다. 함수가 버그가 있음을 제외하고.
XE7, XE6 및 XE에서 같은 결과가 나타납니다.
업데이트
QC127635 StrUtils.SearchBuf fails with [soWholeWord] option
품질 관리 예에서 언급 된 다른 버그가 있습니다 [리포트 : 122357] (http://qc.embarcadero.com/wc/qcmain.aspx?d = 122357) – bummi
@bummi, 네 QC를 검색 한 결과이 현상이 발생하지 않았습니다. –