Khi thử nghiệm StrUtils.SearchBuf với tùy chọn [soWholeWord,soDown]
, một số kết quả không mong muốn đã xảy ra.SearchBuf soWholeWord đầu ra không mong muốn
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.
Tại sao ' Delphi'
và ' Delphi '
không được coi là toàn bộ một từ?
Còn tìm kiếm ngược lại thì sao?
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.
Tôi không có ý nghĩa gì cả. Ngoại trừ chức năng này là lỗi.
Kết quả tương tự trong XE7, XE6 và XE.
Cập nhật
QC127635 StrUtils.SearchBuf fails with [soWholeWord] option
có lỗi khác nhau được đề cập trong QC ví dụ [Báo cáo số: 122357] (http://qc.embarcadero.com/wc/qcmain.aspx?d = 122357) – bummi
@bummi, vâng tôi đã tìm kiếm QC và không tìm thấy kết quả phù hợp cho lần xuất hiện này. –