在线等待送分!(应该简单)(100分)

  • 主题发起人 主题发起人 superdyp2002
  • 开始时间 开始时间
S

superdyp2002

Unregistered / Unconfirmed
GUEST, unregistred user!
请问如果用filter方面实现如下功能:
即搜索到一个目录下的N个文件,把包含AA和包含BB和包含CC的文件名给
筛选出来。如最后可找到 **AA*BB***CC的文件名的文件和*AA***BB*CC的文件名的文件。
!。急。我就这点分了。有用一次送光吧。
谢谢指教!!
 
var
strFolder:string;
FileInfo: TSearchRec;
begin
strFolder:=

if not DirectoryExists(strFolder) then exit;
Screen.Cursor := crHourGlass;
try
if FindFirst(strFolder+'/*.*', faDirectory, FileInfo) = 0 then
begin
Repeat
if (pos('AA', FileInfo.Name)>0) and (pos('BB', FileInfo.Name)>0) and (pos('BB', FileInfo.Name)>0) then
showmessage( FileInfo.Name);
until FindNext(FileInfo) <> 0;
FindClose(FileInfo);
end;
finally
Screen.Cursor := crDefault;
end;
可能代码有问题,但大概意思就是如此
 
不是很精确:
找 BB 应该在 已找到的 AA 后面进行。否则以下就不能匹配:
BBAAxxBBCC

procedure TForm1.Button1Click(Sender: TObject);
var
SR:TSearchRec;
s:string;
begin
if FindFirst('c:/windows/system/*.*', $3f, sr)=0 then
begin
while FindNext(sr)=0 do
begin
s:=trim(UpperCase(extractFileExt(sr.Name)));
if length(s)=0 then continue;
if s[1]='.' then s:=copy(s,2,length(s)-1);
a:=pos('AA',s);
b:=pos('BB',s);
c:=pos('CC',s);
if (a>0) and (b>0) and (c>0) and (b>a) and (c>b)
then showmessage('sr.Name');
end;
FindClose(sr);
end;
end;
 
以下应该是精确的:

procedure TForm1.Button1Click(Sender: TObject);
var
SR:TSearchRec;
s:string;
a,b,c:integer;
begin
if FindFirst('c:/windows/system/*.*', $3f, sr)=0 then
begin
while FindNext(sr)=0 do
begin
s:=trim(UpperCase(extractFileExt(sr.Name)));
if length(s)=0 then continue;
if s[1]='.' then s:=copy(s,2,length(s)-1);
a:=pos('AA',s);
if a>0 then
begin
b:=pos('BB',string(@s[a]));
if b>0 then
begin
b:=a+b-1;
c:=pos('CC',string(@s));
if c>0 then c:=b+c-1;
end;
end;
if (a>0) and (b>0) and (c>0) and (b>a) and (c>b)
then showmessage(sr.Name);
end;
FindClose(sr);
end;
end;
 
正在试。。。谢谢
 
谢谢指教
 
后退
顶部