|
Определенные строки из memo - Вопросы и ответы, обсуждения - Ваши вопросы по Pascal/Delphi только в данном разделе |
01.06.2015, 23:45
|
#1
|
|
|
|
Сержант
|
Регистрация: 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
|
|
|
|
Пехотинец
|
Регистрация: 27.12.2011
Сообщений: 73
Популярность: 2425
Сказал(а) спасибо: 334
Поблагодарили 57 раз(а) в 27 сообщениях
|
Re: Определенные строки из memo
Прежде чем в мемо1 появится лог, какая-то функция ведь его туда отправит. перед отправкой поставить проверку на ключевую фразу, например "was killed by" и распределять на мемо1 либо мемо2.
Или я что-то недопонял?
|
|
|
13.06.2015, 22:14
|
#3
|
|
|
|
Сержант
|
Регистрация: 29.03.2011
Сообщений: 155
Популярность: 3277
Сказал(а) спасибо: 325
Поблагодарили 145 раз(а) в 101 сообщениях
|
Re: Определенные строки из memo
|
|
|
14.06.2015, 00:36
|
#4
|
|
|
|
Разведчик
|
Регистрация: 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
|
|
|
|
Сержант
|
Регистрация: 29.03.2011
Сообщений: 155
Популярность: 3277
Сказал(а) спасибо: 325
Поблагодарили 145 раз(а) в 101 сообщениях
|
Re: Определенные строки из memo
|
|
|
14.06.2015, 02:36
|
#6
|
|
|
|
Разведчик
|
Регистрация: 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пасибо:
|
|
Ваши права в разделе
|
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения
HTML код Выкл.
|
|
|
Заявление об ответственности / Список мошенников
Часовой пояс GMT +4, время: 19:14.
|
|