Delphi下实现包含通配符的文本查找
本文最早在编程论坛上发表,文章地址:http://programbbs.com/bbs/view12-21351-1.htm,相关文件可以在上述地址的页面中下载。转载时请注明出处。
一、前言
通配符就是指“*”和“?”两个字符,“*”表示当前位置可以没有或者有多个任意字符;“?”表示当前位置有一个任意字符。通配符匹配在网上资料中都有讲到,但主要说的都是字符串匹配而不是文本查找。我结合通配符匹配的算法写了一个支持通配符的文本查找函数。这个函数的源代码可以在本楼末尾的压缩包中得到。现在先说一下通配符匹配的算法。
二、通配符匹配算法
利用包含通配符的模式串(以下简称模式串)进行文本查找,通常会匹配到一个不定长度的文本。所以匹配完成后不但要得到匹配文本的结束位置也要得到匹配文本的开始位置。现在先来看一个简单的问题:假设有长度为PLen的模式串P,以及长度为TLen的文本T。如果P中不包含通配符,那么用下面这个简单算法就可以完成查找:
function FindText1(P,T : PAnsiChar; PLen,TLen : Integer; var SelStart,SelEnd : Integer): Boolean;
var
PCur,TCur : Integer;
begin
result:=false;
for TCur:=SelStart to TLen-PLen do
begin
for PCur:=0 to PLen-1 do
if P[PCur]<>T[TCur+PCur] then break;
if PCur>=PLen then
begin
SelStart:=TCur;
SelEnd:=TCur+PLen;
result:=true;
break;
end;
end;
end;
以上函数从文本T的SelStart位置开始向下查找模式串P,返回是否找到,如果找到设置SelStart和SelEnd为匹配文本的开始位置和结束位置。这个算法是最简单的文本查找算法,它有两层循环,外层for循环用以确认查找位置并逐一后移,
相关文档:
以前用过delphi 2007的这个函数的,参数超多,现在的公司用D7,结果网上一查这个函数,用不成了,原来我用错了函数
unit QDialogs;
{$IFDEF LINUX}
function SelectDirectory(const Caption, Root: WideString;
var Directory: WideString; ShowHidden: Boolean = False): Boolean;
{$ENDIF}
{$IFDEF MSWINDOW ......
absolute
//它使得你能够创建一个新变量, 并且该变量的起始地址与另一个变量相同.
var
Str: string[32];
StrLen: Byte absolute Str;
//这个声明指定了变量StrLen起始地址与Str相同.
//由于字符串的第0个位置保存了字符串的长度, 所以StrLen的值即字符串长度.
begin
Str := 'abc';
Ed ......
曹祖权
工具条是程序员喜欢采用的组件,它具有简明直观的外形,能够方便用户执行最常用的功能。如果你使用delphi3编程,那么本人向你推荐coolbar组件。它是一种功能更为丰富的工具条,用它可以使多个传统的工具条、编辑框、组合列表框、图像甚至更多的组件集成到一个统一的coolbar中,使得应用程序窗口更为紧凑、界面 ......
利用Windows API函数WritePrivateProfileString
和GetPrivateProfileString可对.INI文件进行读写操作。其实,对.INI文件的读写完全可以利用Delphi的内置函数来实
现。下面就介绍一些对.INI文件读写时相关的类及其属性方法。
1、TIniFile对象
以Delphi中,定义了一个TIniFile对象,将.INI文件封装在其中,并提供一些方法 ......
有些时候,要写一些程序,在 JAVA 里面好难实现, 但如果使用其它编程语言却又比较容易时,我们不妨通过 JNI 来让不同语言的程序共同完成.
JNI 的教程, 网上 C 的比较多,Java 也提供了 javah.exe 为 C 语言的 JNI 程序生成头文件, 如果你是一个 Delphi 编程员, 能否让 JAVA 与 Delphi 程序交互呢? 答案是肯定的,今天我们就来 ......