![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Поиск по файлам, типа *.xls, *.mdb, *.dbf [D7, XP]
M1sT © (2007-01-17 03:36:00)Привет всем =)))
Задача такова: Хочу сделать программу, что бы она осуществляла поиск нужной строки в файлах с расширением *.xls, *.dbf, *.mdb...
Подскажите пожалуйста какие компоненты лучше использовать, если в каждом файле содержится более 2000 записей??? И как вообще удобнее сделать поиск по файлам, что бы минимально загружать комп, и при этом добиться наилучшей производительности программы??
Сергей М. (2007-01-17 12:57:00) [1]
> какие компоненты лучше использовать
ADO
kaZaNoVa (2007-01-17 12:55:00) [2]
procedure SuperSearch(var k:string);
Var ResultFail,Maska,FText,put1:string;
S_text,freg2:boolean;
MaxFail,MaxTime,mtime,nashli:cardinal;
function texit:boolean;
Var r:boolean;
begin
if gettickcount>(mtime+(MaxTime*1000)) then r:=true else r:=false;;
if not r then
if nashli>=MaxFail then r:=true;
result:=r;
end;
function Nash_Fail(const fn:string):boolean;
begin
if texit then exit;
if S_text then begin
if freg2 then begin
if (pos(FText,FAllRead(fn))<=0) then exit;end else begin
if (pos(uppercase(FText),uppercase(FAllRead(fn)))<=0) then exit; end;
end;
ResultFail:=ResultFail+#13#10+fn;
inc(nashli);
end;
Function Poisk32Ex(const f32:string):Boolean;
Var
a,fname:string;
f1:TWIN32FindData;
f2: THandle;
Begin
if texit then exit;
f2:=FindFirstFile(pchar(f32+'*'),f1); //ищем папки
if f2=INVALID_HANDLE_VALUE then begin
FindClose(f2);exit;
end;
fname:=f1.cFileName;
if ((fname<>'.')and (fname<>'..')and (fname<>'')) then
if (FILE_ATTRIBUTE_DIRECTORY and f1.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY) then Poisk32Ex(f32+fname+'\');
while FindNEXTFile(f2,f1) do begin
if texit then exit;
fname:=f1.cFileName;
if ((fname<>'.')and (fname<>'..')and (fname<>'')) then
if (FILE_ATTRIBUTE_DIRECTORY and f1.dwFileAttributes = FILE_ATTRIBUTE_DIRECTORY) then Poisk32Ex(f32+fname+'\');
end;
FindClose(f2);
f2:=FindFirstFile(pchar(f32+Maska),f1);
if f2=INVALID_HANDLE_VALUE then begin
FindClose(f2);exit;
end;
fname:=f1.cFileName;
if ((fname<>'.')and (fname<>'..')and (fname<>'') and (FILE_ATTRIBUTE_DIRECTORY and f1.dwFileAttributes <> FILE_ATTRIBUTE_DIRECTORY))
then Nash_Fail(f32+fname);
if texit then exit;
while FindNEXTFile(f2,f1) do begin
if texit then exit;
fname:=f1.cFileName;
if ((fname<>'.')and (fname<>'..')and (fname<>'') and (FILE_ATTRIBUTE_DIRECTORY and f1.dwFileAttributes <> FILE_ATTRIBUTE_DIRECTORY))
then Nash_Fail(f32+fname);
end;
FindClose(f2);
end;
Begin
//формат данных поиска
//путь|маска|не более|время|с текстом|с учётом регистра в тексте
put1:=copy(k,1,pos('|',k)-1); nashli:=0;
delete(k,1,pos('|',k));
Maska:=copy(k,1,pos('|',k)-1);
delete(k,1,pos('|',k));
MaxFail:=strtoint(copy(k,1,pos('|',k)-1));
delete(k,1,pos('|',k));
if MaxFail<=0 then MaxFail:=1;
MaxTime:=strtoint(copy(k,1,pos('|',k)-1));
delete(k,1,pos('|',k));
if copy(k,1,3)='<|>' then S_text:=false else
begin
S_text:=true;
FText:=(copy(k,1,pos('|',k)-1));
delete(k,1,pos('|',k));
freg2:=k='0';
end;
ResultFail:='';
mtime:=gettickcount;
Poisk32Ex(put1);
send_q:='017Nashli '+inttostr(nashli)+'Time '+inttostr(gettickcount-mtime)+' ms|'+ResultFail;
Send1(send_q);
end;
Virgo_Style (2007-01-17 06:39:00) [3]M1sT © (17.01.07 3:36)
Подскажите пожалуйста какие компоненты лучше использовать, если в каждом файле содержится более 2000 записей???
видимо, позволяющие делать SQL-запросы