Регистрация Главная Сообщество
Сообщения за день Справка Регистрация

Определенные строки из memo

-

Вопросы и ответы, обсуждения

- Ваши вопросы по Pascal/Delphi только в данном разделе

Ответ
 
Опции темы
Старый 01.06.2015, 23:45   #1
 Сержант
Аватар для КириллZ
 
КириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нации
Регистрация: 29.03.2011
Сообщений: 155
Популярность: 3277
Сказал(а) спасибо: 325
Поблагодарили 145 раз(а) в 101 сообщениях
 
По умолчанию Определенные строки из memo

Всем привет! Возникла проблема:

Есть log сервера, из него надо вытащить события, связанные с убийством игроков.

Образец строки: "Player XXX was killed by YYY at a distance AA with weapon ZZZ"

И все подобные строки будут сохраняться в memo2, где после пойдут в обработку через RegExpr.

Как реализовать вырезание строк похожих?
  Ответить с цитированием
Старый 02.06.2015, 01:54   #2
 Пехотинец
Аватар для NebesaBag
 
NebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражанияNebesaBag блестящий пример для подражания
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
 
По умолчанию Re: Определенные строки из memo

Прежде чем в мемо1 появится лог, какая-то функция ведь его туда отправит. перед отправкой поставить проверку на ключевую фразу, например "was killed by" и распределять на мемо1 либо мемо2.
Или я что-то недопонял?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]

Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)


Кто плюсует популярность, подписывайтесь пожалуйста)
  Ответить с цитированием
Старый 13.06.2015, 22:14   #3
 Сержант
Аватар для КириллZ
 
КириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нации
Регистрация: 29.03.2011
Сообщений: 155
Популярность: 3277
Сказал(а) спасибо: 325
Поблагодарили 145 раз(а) в 101 сообщениях
 
По умолчанию Re: Определенные строки из memo

Код:
function ReadFromFile(FileName: string): string;
begin
  with TStringList.create do
  try
    LoadFromFile(FileName);
    result := text;
  finally
    Free;
  end;
end;
procedure TForm1.FormCreate(Sender: TObject);
begin
sMemo2.lines.loadfromfile('server.RPT');
end;



procedure TForm1.sButton1Click(Sender: TObject);
var
  r: TRegExpr;
  result1, result2: string;
begin
  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('Не найдено');
end;

[Ссылки могут видеть только зарегистрированные пользователи. ]

Полный лог идет где-то более 100к строк.

При нажатие на кнопку в мемо появляется куча мусора и в итоге появляется нужная нам строка в конце, но она обрывается на Player Имя_Убийцы и все, на этом поиск заканчивается. Что делать?
  Ответить с цитированием
Старый 14.06.2015, 00:36   #4
 Разведчик
Аватар для hunker
 
hunker на правильном путиhunker на правильном пути
Регистрация: 01.05.2011
Сообщений: 17
Популярность: 159
Сказал(а) спасибо: 9
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Определенные строки из memo

Тут лучше включить модификатор “m”, так как текст многострочный. Тогда в регулярку можно будет добавить метасимвол окончания строки “$”. И лучше заменить (.*) на (.*?). У тебя в коде много лишнего. Вот так должно работать:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var r: TRegExpr;
begin

  sMemo2.lines.loadfromfile('server.RPT');
  sMemo1.Clear;

  r := TRegExpr.Create;
  try

    r.ModifierStr := 'm';
    r.Expression := 'Player (.*?) was killed by (.*?) at a distance (.*?) with weapon (.*?)$';
    if r.Exec(sMemo2.Text) then
      repeat

        sMemo1.Lines.Add(Format('%s | %s | %s | %s', [r.Match[1], r.Match[2], r.Match[3], r.Match[4]]));

      until not r.ExecNext;

  finally

    r.free;

  end;

end;
P.S. Подгружать лог на 100к строк в memo не самая лучшая идея. Используй TStringList.
  Ответить с цитированием
Старый 14.06.2015, 00:51   #5
 Сержант
Аватар для КириллZ
 
КириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нацииКириллZ гордость нации
Регистрация: 29.03.2011
Сообщений: 155
Популярность: 3277
Сказал(а) спасибо: 325
Поблагодарили 145 раз(а) в 101 сообщениях
 
По умолчанию Re: Определенные строки из memo

Цитата:
Сообщение от hunkerПосмотреть сообщение
Тут лучше включить модификатор “m”, так как текст многострочный. Тогда в регулярку можно будет добавить метасимвол окончания строки “$”. И лучше заменить (.*) на (.*?). У тебя в коде много лишнего. Вот так должно работать:
Код:
procedure TForm1.FormCreate(Sender: TObject);
var r: TRegExpr;
begin

  sMemo2.lines.loadfromfile('server.RPT');
  sMemo1.Clear;

  r := TRegExpr.Create;
  try

    r.ModifierStr := 'm';
    r.Expression := 'Player (.*?) was killed by (.*?) at a distance (.*?) with weapon (.*?)$';
    if r.Exec(sMemo2.Text) then
      repeat

        sMemo1.Lines.Add(Format('%s | %s | %s | %s', [r.Match[1], r.Match[2], r.Match[3], r.Match[4]]));

      until not r.ExecNext;

  finally

    r.free;

  end;

end;
P.S. Подгружать лог на 100к строк в memo не самая лучшая идея. Используй TStringList.

Результат такой же.. Мусор и в конце нужная строка, дальше поиск не идет. [Ссылки могут видеть только зарегистрированные пользователи. ]
  Ответить с цитированием
Старый 14.06.2015, 02:36   #6
 Разведчик
Аватар для hunker
 
hunker на правильном путиhunker на правильном пути
Регистрация: 01.05.2011
Сообщений: 17
Популярность: 159
Сказал(а) спасибо: 9
Поблагодарили 4 раз(а) в 4 сообщениях
 
По умолчанию Re: Определенные строки из memo

Нужно отключить модификатор “s”.
Измени строку r.ModifierStr := 'm' на r.ModifierStr := 'm-s';

Последний раз редактировалось hunker; 14.06.2015 в 02:39.
  Ответить с цитированием
Пользователь сказал cпасибо:
КириллZ (14.06.2015)
Ответ


Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
[Услуги] Надежная информация на определенные матчи от проверенных источников dogovormatch Товары/услуги в Сети 3 19.08.2015 14:22
[Куплю] Куплю аккаунты www.VK.com ( ОПРЕДЕЛЕННЫЕ ) Eleonorrrr Социальные сети 0 14.08.2014 06:23
Memo v 1.1 Hak35 Общение и обсуждение CrossFire 8 01.01.2012 13:09
Memo v 1.1 Memo1488 Общение и обсуждение CrossFire 12 31.12.2011 10:42

Заявление об ответственности / Список мошенников

Часовой пояс GMT +4, время: 19:14.

Пишите нам: [email protected]
Copyright © 2024 vBulletin Solutions, Inc.
Translate: zCarot. Webdesign by DevArt (Fox)
G-gaMe! Team production | Since 2008
Hosted by GShost.net