Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Общие вопросы Delphi
Регистрация

Восстановить пароль

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2015, 20:43   #1
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию Поиск с помощью regexp в memo

Здравствуйте, уважаемые участники форума! Столкнулся с проблемой, которую никак не могу решить.

Суть проблемы:

Есть логи игрового сервера, из них нам надо вытащить событие убийства игрока другим игроком.
Событие выглядит так: Player ИМЯ_Игрока_убийцы was killed by Имя_игрока_жертвы at a distance ДИСТАНЦИЯ m with weapon ОРУЖИЕ

Пробовал делать так:
Программа подгружает лог в memo, и ведет поиск
Код:
 r := TRegExpr.Create;
  r.InputString := sMemo2.Text;
  r.Expression := 'Player (.*?) was killed by (.*?) at a distance (.*) with weapon (.*)';
  if r.Exec then
  begin
    result1 := r.Match[1];
    smemo1.text := (result1);
  end else
    showmessage('Не найдено');
Но в итоге в другом memo у нас весь лог сервера до нужного нам события, которое заканчивается только на словах Player Имя_Убийцы и все. На этом поиск завершается, хотя в логе еще больше таких вот событий.

Помогите пожалуйста решить данную проблему, и как избавиться от лишнего в начале, а вносить только данную строку в результат?
Кирилл12345 вне форума Ответить с цитированием
Старый 13.06.2015, 21:08   #2
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Загрузить всё в TStringList, затем в цикле построчно используя функцию Pos производить поиск
Antony41 вне форума Ответить с цитированием
Старый 13.06.2015, 21:17   #3
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Antony41 Посмотреть сообщение
Загрузить всё в TStringList, затем в цикле построчно используя функцию Pos производить поиск
А с помощью функции Pos можно сделать такой шаблон поиска?
Кирилл12345 вне форума Ответить с цитированием
Старый 13.06.2015, 21:22   #4
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Цитата:
Сообщение от Кирилл12345 Посмотреть сообщение
А с помощью функции Pos можно сделать такой шаблон поиска?
Если вы имеете ввиду маску (*.*), то нет, а зачем?
Antony41 вне форума Ответить с цитированием
Старый 13.06.2015, 21:27   #5
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Antony41 Посмотреть сообщение
Если вы имеете ввиду маску (*.*), то нет, а зачем?
Ну смотрите, надо с помощью поиска отсеивать Имя_убийцы и Имя_Жертвы в memo, для этого как раз и нужна маска. Ну или я вас не понял
Кирилл12345 вне форума Ответить с цитированием
Старый 13.06.2015, 21:36   #6
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

дай файл лога.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.06.2015, 21:37   #7
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Лог выложи попробую помочь
Antony41 вне форума Ответить с цитированием
Старый 13.06.2015, 21:38   #8
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
дай файл лога.
Часть лога http://pastebin.com/PNxHxSmd
Весь лог http://rghost.ru/7HGG9nmM4
Кирилл12345 вне форума Ответить с цитированием
Старый 13.06.2015, 21:52   #9
Antony41
Пользователь
 
Аватар для Antony41
 
Регистрация: 20.03.2009
Сообщений: 99
По умолчанию

Так?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  I: Integer;
begin
  SL := TStringList.Create;
  try
    if OD1.Execute then
      begin
        SL.LoadFromFile(OD1.FileName);
        if SL.Count = 0 then
          Exit;
        for I := 0 to SL.Count - 1 do
          begin
            if Pos('killed a', SL.Strings[i]) > 0 then
              Memo1.Lines.Add(SL.Strings[i]);
          end;
      end;
  finally
    SL.Free;
  end;
end;
Вложения
Тип файла: zip Пример.zip (57.2 Кб, 6 просмотров)
Antony41 вне форума Ответить с цитированием
Старый 13.06.2015, 21:57   #10
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от Antony41 Посмотреть сообщение
Так?
Код:
procedure TForm1.Button1Click(Sender: TObject);
var
  SL: TStringList;
  I: Integer;
begin
  SL := TStringList.Create;
  try
    if OD1.Execute then
      begin
        SL.LoadFromFile(OD1.FileName);
        if SL.Count = 0 then
          Exit;
        for I := 0 to SL.Count - 1 do
          begin
            if Pos('killed a', SL.Strings[i]) > 0 then
              Memo1.Lines.Add(SL.Strings[i]);
          end;
      end;
  finally
    SL.Free;
  end;
end;
Благодарю, данный код уже ближе к истине
Кирилл12345 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Поиск REGEXP с объединением таблиц miragex SQL, базы данных 4 01.06.2015 08:37
Можно ли с помощью REGEXP осуществлять регистронезависимый поиск? Microplankton SQL, базы данных 8 03.03.2015 11:10
Поиск тегов. RegExp soonner JavaScript, Ajax 1 14.09.2013 14:28
поиск в Memo Yokka Общие вопросы C/C++ 1 24.05.2010 16:50
Поиск в MEMO dimafe6 Общие вопросы Delphi 9 09.02.2010 22:03