Прежде чем в мемо1 появится лог, какая-то функция ведь его туда отправит. перед отправкой поставить проверку на ключевую фразу, например "was killed by" и распределять на мемо1 либо мемо2.
Или я что-то недопонял?
________________
[Ссылки могут видеть только зарегистрированные пользователи. ]
Для просмотра ссылок или изображений в подписях, у Вас должно быть не менее 10 сообщение(ий). Сейчас у Вас 0 сообщение(ий). Пишу софт на заказ(Delphi / C# / PHP-скрипты). Описывайте задачи и цели софта, сообщайте сумму на которую рассчитываете.
Skype: vinozavr (Молдова)
Кто плюсует популярность, подписывайтесь пожалуйста)
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 Имя_Убийцы и все, на этом поиск заканчивается. Что делать?
Тут лучше включить модификатор “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.
Тут лучше включить модификатор “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.
Результат такой же.. Мусор и в конце нужная строка, дальше поиск не идет. [Ссылки могут видеть только зарегистрированные пользователи. ]