function MatchPatern(Value, Patern: string): Boolean;
begin
//要达到的目的是如果Value匹配由Patern指定的模式
//就返回True,否则返回False
//例如
//Value='a.txt',Patern='*.txt',Result=True
//Value='abc.txt',Patern='a?c.txt',Result=True
//……
//这个函数该怎么写?
end;
begin
//要达到的目的是如果Value匹配由Patern指定的模式
//就返回True,否则返回False
//例如
//Value='a.txt',Patern='*.txt',Result=True
//Value='abc.txt',Patern='a?c.txt',Result=True
//……
//这个函数该怎么写?
end;
解决方案 »
- 高手请进,关于3DVIA Composer player的ActiveX控件,
- delphi 循环变量的问题
- 改变标题栏颜色
- 紧急求助!如何对DBgrid的所有行进行循环读取,然后改变DBGrid控件中某几个行的颜色?
- 数据接口
- 如何分别取得字符串中空格前和空格后的数据呢?如‘dfds df fds'分为dfds df fds.
- 如何编程实现查看—“文件夹选项”里的“不显示隐藏文件”的功能!
- 我想学DELPHI,请问DELPHI的经典书籍有哪些?
- 请问哪里有<mastering delphi 6>的英文版下载?
- 菜鸟提问:如何把.ocx文件添加到ActiveX面板上?对不起,只有10分了。
- asp组件的问题
- 现在做一个程序:想在启动时同时启动两个子窗体,上下排列,请问如何做?
将patern中去掉通配符后的字符串与value比较,如果是value的子串,则结果为true,否则为false;
begin
pattern:=insert(pattern,value[pos('*',pattern)]);
pattern:=delete(pattern,'*',1);
if pattern=value then result:=true
else result:=false;
end;
直接把pattern中的*或者?号变成value中相应位置的字符,然后,两者进行比较
如实参如下
var:='abc'
pattern:='a*c'我们就把pattern:='a*c'变成'abc'
方法如下。
pattern:=insert(pattern,value[pos('*',pattern)],pos('*',pattern));
pattern:=delete(pattern,'*',1);
if pattern=value then result:=true
else result:=false;
,
你的方法只对a.txt和*.txt之类的组合有效。但是如果是abc.txt与a*.txt,用你的方法就无效了。
sr: TSearchRec;
begin
if findfirst('path\*.txt',faAnyFile,sr)=0 then
showmessage(sr.Name);
while FindNext(sr) = 0 do
showmessage(sr.Name); //通过sr可以取得文件名
FindClose(sr);
end;
谢谢!你启发了我一些思路。
但是,你的方法只是对单字符匹配有效。可我希望做到的是类似于DOS的文件名匹配一样,?代表单个字符,*代表一个或多个字符。对于*这种情况,应该怎么办呢?
----------------------------------------------
riff ur life
var s: string;
begin
Result := False;
s := Patern; // 替换全部的"?"
while (Pos('?', s) <> 0) do
s := StringReplace(s, '?', Value[Pos('?',s)], []);
if s = Value then
begin
Result := True;
Exit;
end; // 替换"*"
if Pos('*', s) <> 0 then
begin
s := StringReplace(s, '*', Copy(Value, Pos('*', s), Length(Value)-Length(s)+1), []);
if s = Value then
begin
Result := True;
Exit;
end;
end;
end;