Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Поиск по файлам, типа *.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-запросы


Наверх

Титульная страница Поиск, карта сайта Написать письмо