123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- program TestIndexer;
- { $define usefirebird}
- { $define usemem}
- {$mode objfpc}{$H+}
- {$IFDEF UNIX}
- {$linklib pthread}
- {$ENDIF}
- uses
- SysUtils,
- {$IFDEF UNIX} {$IFDEF UseCThreads}
- cthreads,
- {$ENDIF} {$ENDIF}
- {$ifdef usefirebird}
- ibase60dyn,SQLDBIndexDB, fbIndexdb,
- {$else}
- {$ifdef usemem}
- memindexdb,
- {$else}
- SQLIteIndexDB,
- {$endif}
- {$endif}
- fpIndexer,
- //indexer readers
- IReaderTXT, IReaderPAS, IReaderHTML;
- Type
- { TProgressLog }
- TProgressLog = Class(TObject)
- procedure DoLog(Sender : TObject; Const ACurrent,ACount : Integer; Const AURL : UTF8String);
- end;
- {$ifdef usefirebird}
- function SetupDB : TCustomIndexDB;
- var
- IB: TFBIndexDB;
- begin
- IB := TFBIndexDB.Create(nil);
- try
- IB.DatabasePath := '/home/firebird/index.fb';
- IB.UserName := 'SYSDBA';
- IB.Password := 'masterkey';
- if not FileExists(IB.DatabasePath) then
- IB.CreateDB
- else
- begin
- IB.Connect;
- IB.CreateIndexerTables;
- end;
- except
- FreeAndNil(IB);
- Raise;
- end;
- Result:=IB;
- end;
- {$else}
- {$ifdef usemem}
- Function SetupDB : TCustomIndexDB;
- Var
- FI : TFileIndexDB;
- begin
- FI:=TFileIndexDB.Create(Nil);
- FI.FileName:='index.dat';
- FI.Connect;
- FI.WriteOnCommit:=True;;
- Result:=FI;
- end;
- {$else}
- Function SetupDB : TCustomIndexDB;
- Var
- SB: TSQLIteIndexDB;
- begin
- SB := TSQLIteIndexDB.Create(nil);
- SB.FileName := 'index.db';
- if not FileExists(SB.FileName) then
- SB.CreateDB
- else
- begin
- SB.Connect;
- SB.CreateIndexerTables;
- end;
- Result:=SB;
- end;
- {$endif}
- {$endif}
- Procedure Testindex(ADir : String);
- var
- Indexer: TFPIndexer; //indexes files
- start: TDateTime;
- n: int64;
- endtime: TDateTime;
- Logger : TProgressLog;
- begin
- //SetHeapTraceOutput('heap.trc');
- start := Now;
- Indexer := TFPIndexer.Create(Nil);
- try
- Indexer.Database:=SetupDB;
- //setup parameters for indexing
- if (ADir<>'') then
- Indexer.SearchPath:=ADir
- else
- {$ifdef unix}
- Indexer.SearchPath := '/home/michael/fpc/docs/fcl';
- {$else}
- Indexer.SearchPath := 'C:\fcl';
- {$endif}
- Indexer.FileMask := '*.pas;*.html;readme.txt'; //semicolon separated list
- Indexer.SearchRecursive := True;
- Indexer.DetectLanguage := False;
- IgnoreListManager.LoadIgnoreWordsFromFile('english','english.txt');
- indexer.Language:='english';
- Indexer.UseIgnoreList:=true;
- Logger := TProgressLog.Create;
- try
- Indexer.OnProgress:[email protected];
- n := Indexer.Execute(True);
- finally
- Logger.Free;
- end;
- //execute the search
- endtime := Now;
- if N <> 0 then
- writeln('indexing succesfull')
- else
- writeln('error indexing.');
- writeln(Format('done in %.1f sec.', [(endtime - start) * 24 * 3600]));
- finally
- Indexer.Database.free;
- FreeAndNil(Indexer);
- end;
- end;
- { TProgressLog }
- procedure TProgressLog.DoLog(Sender: TObject; const ACurrent, ACount: Integer;
- const AURL: UTF8String);
- begin
- Writeln((ACurrent/ACount*100):5:2,'% : ',ACurrent,'/',ACount,' : ',AURL);
- end;
- begin
- TestIndex(ParamStr(1));
- end.
|