使用选项测试StrUtils.SearchBuf时[soWholeWord,soDown],会发生一些意外结果.
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.
Run Code Online (Sandbox Code Playgroud)
为什么' 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,'" …Run Code Online (Sandbox Code Playgroud) 我的程序中有一个FindFile例程,它将列出文件,但是如果填写了"Containing Text"字段,那么它应该只列出包含该文本的文件.

如果输入"包含文本"字段,则我搜索为文本找到的每个文件.我目前的做法是:
var
FileContents: TStringlist;
begin
FileContents.LoadFromFile(Filepath);
if Pos(TextToFind, FileContents.Text) = 0 then
Found := false
else
Found := true;
Run Code Online (Sandbox Code Playgroud)
上面的代码很简单,一般都可以.但它有两个问题:
对于非常大的文件(例如300 MB),它会失败
我觉得它可能会更快.这还不错,但为什么要等待10分钟搜索1000个文件,如果可能有一个简单的方法来加快它的速度?
我需要这个用于Delphi 2009并搜索可能是也可能不是Unicode的文本文件.它只需要用于文本文件.
那么如何加快搜索速度并使其适用于非常大的文件呢?
额外奖励:我还想要允许"忽略大小写"选项.提高效率是一件更艰难的事情.有任何想法吗?
解:
嗯,mghie指出我之前的问题如何在Delphi中有效地阅读许多文件的前几行,而且正如我所回答的那样,它是不同的,并没有提供解决方案.
但是他让我想到我以前做过这件事而且我曾经做过.我为大文件构建了一个块读取例程,将其分解为32 MB块.我用它来读取我的程序的输入文件,这可能是巨大的.该例程工作正常,速度快.所以第一步是对我正在浏览的这些文件做同样的事情.
所以现在问题是如何在这些块内有效搜索.那么我确实有一个关于该主题的上一个问题:Delphi中是否有一个高效的全字搜索功能?和RRUZ向我指出了SearchBuf例程.
这也解决了"奖金",因为SearchBuf有选项,包括全字搜索(该问题的答案)和MatchCase/noMatchCase(奖金的答案).
所以我开始跑步了.再次感谢SO社区.
我有20个不同的词.如何在SynEdit中突出显示具有不同颜色的单词的行?如果无法突出显示行,则只需突出显示单词.
十分感谢!!!!!!
是否有任何函数/过程,ReplaceString但对于Delphi上的整个单词?我只需要将子串替换为新的子串,当它是一个完整的单词时.例如:
substring - > newstring
substring, -> newstring
substring123 -> substring
Run Code Online (Sandbox Code Playgroud) delphi ×4
delphi-xe7 ×1
highlighting ×1
large-files ×1
optimization ×1
search ×1
string ×1
synedit ×1