大出血——:如何在指定目录中找出含有关键字的若干文件?(300分)

  • 主题发起人 主题发起人 galahad
  • 开始时间 开始时间
G

galahad

Unregistered / Unconfirmed
GUEST, unregistred user!
各位朋友,我因工作需要经常会在大量的word和excel文档中查找具有某个关键字的相
关资料,(如在某个目录中有几百个word,excel,wps文件,其中有几个是含有“张三”
的信息的)我想做这样一个小程序,输入欲查询的关键字如“张三”即把所有内容中与
“张三”有关的文件找出来,我去查看这几个文件就行了,这样就免去我找“张三”资
料时挨个打开好几百个文件的痛苦了。可我不知该如何下手,我该如何实现呢?
大虾们,快快出手,拔刀相助啊!!!
 
这个简单,用一个listview把符合条件的文件显示出来,其中参数apath是路径例如"C:/"
procedure TMain.SetListview;
var
FSearchRec,DSearchRec:TSearchRec;
FindResult:integer;
f:file of byte;
Newitem:TListItem;
begin
findresult:=findfirst(Apath+'a*.*',faanyfile,fsearchrec);//把a开头的文件找出来
listview1.Items.Clear;
try
while findresult=0 do
begin
newitem:=listview1.Items.Add;
newitem.Caption:=fsearchrec.Name;
newitem.ImageIndex:=0;
assignfile(f,Apath+fsearchrec.Name);
Reset(f);
closefile(f);
findresult:=findnext(fsearchrec)
end;
findresult:=findfirst(apath+'a*.*',fadirectory,dsearchrec);//下一个a开头的文件
while findresult=0 do
findresult:=findnext(dsearchrec);
finally
findclose(fsearchrec);
end;
end;
 
楼上老兄,人家是问 "找文件中含有的有关内容的" ,不是找文件名中含有的有关内容的!
 
逐个打开,逐个查找不就行了?
 
有一个程序,你可以参考,信箱留下
 
感谢terry_lzs不过oldppp老兄说的是,关键字在文件内容中;
坏螳螂真是够坏的乐;
浪里白条:发到这个地址吧early@wang.com.cn,谢谢
 
呵呵碰到我算你碰对,在下曾经作过此类程序,如果逐个打开直接在文件中查找的话会
比较慢,你可以打开后读入内存,如FileRead(buf,size);然后在Buf中查找,这样速度会
提高1000倍左右,呵呵计算不准,不过确实,能大大提高速度!
 
如果是明码当然好办,如果是word之类的,你也没办法
function choosefile(apath:string;substring:string):boolean;
var s:Tstrtinglist;
begin
s:=Tstringlist.create;
s.loadfromfile(apath);
result:=pos(substring,s.text);
end;
把这个函数添加到我上面的那段代码中就行了
procedure TMain.SetListview;
var
FSearchRec,DSearchRec:TSearchRec;
FindResult:integer;
f:file of byte;
Newitem:TListItem;
begin
findresult:=findfirst(Apath+'*.*',faanyfile,fsearchrec);
listview1.Items.Clear;
try
while findresult=0 do
begin
if choosefile(apath+fsearchrec.name,'你要查找的字符串') then//在这里判断就行
begin
newitem:=listview1.Items.Add;
newitem.Caption:=fsearchrec.Name;
newitem.ImageIndex:=0;
end;
assignfile(f,Apath+fsearchrec.Name);
Reset(f);
closefile(f);
findresult:=findnext(fsearchrec)
end;
findresult:=findfirst(apath+'*.*',fadirectory,dsearchrec);
while findresult=0 do
findresult:=findnext(dsearchrec);
finally
findclose(fsearchrec);
end;
end;

 
为什么我运行通不过。tmain.setlistview是怎么回事?
 
setlistview是我定义的一个过程,Main是我的Form的name
 
office 不是有一个软件叫做 finder.exe 吗?可以查找 office 文档。
 
浪里白条:我也要!
oldppp@263.net
 
浪里白条:这个程序你运行了吗,为什么每次search后总是没反映,而且
DirectoryListBox1并不随DriveComboBox1的变化而变化呢?

terry_lzs:能把你的程序加到一个窗体里给我发过来吗,我试了好久也弄不明白,急死
我了。early@wang.com.cn
 
发出去了,请查收
 
我那程序是《delphi4开发大全》上的一个范例程序,我也不太明白,不过是可以查找txt
类型的文件,不知可否用于OFFICE 就不知道了,我还没好好看过
你不要试着改变目录,本身程序目录里有几个文件,查查看,还是挺有用的,你自已慢慢看
吧,有收获了请告诉我
to oldppp@263.net 也给你发一份,大家一起研究吧
 
word,excel,wps 等软件都有自己的格式,不像TxT文件这么简单。
如果单单是查找一下 文件中是否有匹配字符串 这样是不行的。
 
浪里白条:我收到的附件不全,打不开. 麻烦你再发一次.这263的信箱有问题.

要不请分别压缩,小一点的附件发.
我收到后另开帖子给你加分!

谢谢
 
转了几个信箱才下全.
我看了一下,只能查文本文件的,其余格式不行.
现在还没有头绪,难道先要全部转成文本文件? 笨!
谁有好主意?
 
你非得要自己做这个程序不可吗?是你的程序需要这个功能还是你在实际工作中需要?
 
to mikedeakins:实际工作需要。
to terry_lzs:我还是无法打开它。
 
后退
顶部