Searching for a string in log files

167 Views Asked by At

I would like to search for a key words added to CheckListBox in chosen folder in my computer by clicking TButton2. I mean that the app will search in all log files which are in the chosen folder. I don't want to choose a single file to search in it but all folder. Please, help me

If it helps, its my all code:

unit UPrzeszukiwaczLogów;

interface

uses
  Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics,
  Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls, Vcl.CheckLst, Vcl.ExtCtrls, FileCtrl,
  System.Actions;

type
  TForm1 = class(TForm)
    Label1: TLabel;
    Edit1: TEdit;
    Label2: TLabel;
    Edit2: TEdit;
    Button1: TButton;
    Label3: TLabel;
    Label4: TLabel;
    Label5: TLabel;
    Memo1: TMemo;
    Memo2: TMemo;
    Button2: TButton;
    Button3: TButton;
    Button4: TButton;
    CheckListBox1: TCheckListBox;
    Button5: TButton;
    Button6: TButton;
    Button7: TButton;
    procedure Button1Click(Sender: TObject);
    procedure Button3Click(Sender: TObject);
    procedure Button6Click(Sender: TObject);
    procedure Button7Click(Sender: TObject);
    procedure Button4Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  Form1: TForm1;
  chosenDirectory : string;

implementation

{$R *.dfm}

procedure TForm1.Button1Click(Sender: TObject);
begin
  if Edit2.Text <> '' then
    begin
      CheckListBox1.Items.Add(Edit2.Text);
      Edit2.Text := '';
      Edit2.SetFocus;
    end;
end;

procedure TForm1.Button3Click(Sender: TObject);
var
s: string;
begin
  if SelectDirectory('Select a directory', s, s, []) then
    Edit1.Text:= s
  else
    if MessageBox(Handle, 'Anulowano wybieranie lokalizacji do przeszukania',
      'Przeszukiwacz logów', MB_ICONINFORMATION or MB_OK) = IDOK then
      Exit;
end;


procedure TForm1.Button4Click(Sender: TObject);
var
  i: integer;
begin
  for i := CheckListBox1.Count - 1 downto 0 do
    if CheckListBox1.Checked[i] then
    begin
      CheckListBox1.Selected[i] := True;
      CheckListBox1.DeleteSelected;
    end;
end;

procedure TForm1.Button6Click(Sender: TObject);
begin
  CheckListBox1.Clear;
end;

procedure TForm1.Button7Click(Sender: TObject);
begin
  Edit1.Clear;
  Edit2.Clear;
  CheckListBox1.Clear;
  Memo1.Clear;
  Memo2.Clear;
  Edit1.SetFocus;
end;
end.
1

There are 1 best solutions below

1
A.K.D. On

If you want select multiple file for search:

        uses System.IOUtils;
        ...
        ...


procedure    TForm88.Button2Click(Sender: TObject);
        
            var
              files: TStringDynArray;
              I: Integer;
            begin
                 ListBox1.Items.Clear;
                 files := TDirectory.GetFiles('c:\windows','*.log');
                 begin
                   for i := 0 to Length(files)-1 do
                   begin
                     ListBox1.Items.Add(files[i])
                     // your string search code here
                   end;
                end;
            end;