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

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

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

Восстановить пароль
Повторная активизация e-mail

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

Ответ
 
Опции темы Поиск в этой теме
Старый 13.06.2015, 22:21   #11
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,291
По умолчанию

Код:
RegExp.InputString := Memo2.Text;
RegExp.Expression := '"Player (.*?) was killed by (.*?) at a distance (.*?) with weapon (.*?)"';
Memo1.Clear;
Memo1.Lines.BeginUpdate;
If RegExp.Exec Then
 Repeat
  Memo1.Lines.Add(RegExp.Match[0]);
 Until not RegExp.ExecNext;
Memo1.Lines.EndUpdate;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.06.2015 в 23:31.
BDA на форуме Ответить с цитированием
Старый 13.06.2015, 23:04   #12
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Код:
//------ shit-code ---------
type
  TKillInfo = record
    Killer: string;
    Victim: string;
    Distance: string;
    Weapon: string;

    Success: Boolean;
  end;

function GetKillInfo(const S: string): TKillInfo;

implementation

//------------------------------------------------------------------------------
{17:20:47 "Player [Zeppelin] was killed by [CB]Rayd at a distance 3 m with weapon AKM"}

function GetKillInfo(const S: string): TKillInfo;
var
  cx, px: array[0..3] of Integer;
  idx: Integer;
const
  s0 = '"Player ';
  s1 = ' was killed by ';
  s2 = ' at a distance ';
  s3 = ' with weapon ';
  sx: array[0..3] of PChar = (s0, s1, s2, s3);
begin
  Result.Success:= True;

  for idx:= 0 to 3 do
    begin
      cx[idx]:= Length(sx[idx]);
      px[idx]:= ifthen(idx = 0, Pos(sx[idx], S, 1), Pos(sx[idx], S, px[idx - 1]));
      Result.Success:= Result.Success and (px[idx] <> 0);
    end;

  if not Result.Success
    then Exit;

  Result.Victim:=   Copy(S, px[0] + cx[0], px[1] - px[0] - cx[0]);
  Result.Killer:=   Copy(S, px[1] + cx[1], px[2] - px[1] - cx[1]);
  Result.Distance:= Copy(S, px[2] + cx[2], px[3] - px[2] - cx[2]);
  Result.Weapon:=   Copy(S, px[3] + cx[3], Length(S) - px[3] - cx[3]);
end;
Ахтунг! Аттеншн! Внимание! Увага!!! SHIT-CODE detected!!! Не отлаживал, писал на заборе!
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.06.2015, 23:27   #13
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
Код:
//------ shit-code ---------
type
  TKillInfo = record
    Killer: string;
    Victim: string;
    Distance: string;
    Weapon: string;

    Success: Boolean;
  end;

function GetKillInfo(const S: string): TKillInfo;

implementation

//------------------------------------------------------------------------------
{17:20:47 "Player [Zeppelin] was killed by [CB]Rayd at a distance 3 m with weapon AKM"}

function GetKillInfo(const S: string): TKillInfo;
var
  cx, px: array[0..3] of Integer;
  idx: Integer;
const
  s0 = '"Player ';
  s1 = ' was killed by ';
  s2 = ' at a distance ';
  s3 = ' with weapon ';
  sx: array[0..3] of PChar = (s0, s1, s2, s3);
begin
  Result.Success:= True;

  for idx:= 0 to 3 do
    begin
      cx[idx]:= Length(sx[idx]);
      px[idx]:= ifthen(idx = 0, Pos(sx[idx], S, 1), Pos(sx[idx], S, px[idx - 1]));
      Result.Success:= Result.Success and (px[idx] <> 0);
    end;

  if not Result.Success
    then Exit;

  Result.Victim:=   Copy(S, px[0] + cx[0], px[1] - px[0] - cx[0]);
  Result.Killer:=   Copy(S, px[1] + cx[1], px[2] - px[1] - cx[1]);
  Result.Distance:= Copy(S, px[2] + cx[2], px[3] - px[2] - cx[2]);
  Result.Weapon:=   Copy(S, px[3] + cx[3], Length(S) - px[3] - cx[3]);
end;
Ахтунг! Аттеншн! Внимание! Увага!!! SHIT-CODE detected!!! Не отлаживал, писал на заборе!
А как это можно использовать?
Кирилл12345 вне форума Ответить с цитированием
Старый 13.06.2015, 23:36   #14
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
А как это можно использовать?
глузишь лог в стринглист или ещё куда, а потом в цикле берёшь строки из списка и суёшь в функцию параметром S. Функция вернёт структуру TKillInfo. Если поле Success = true, значит строка правильная и можно взять из структуры инфу об убивце, жертве, дистанции и оружии.
Код:
procedure TFormMain.ButtonShitClick(Sender: TObject);
var
  ki: TKillInfo;
const
  S = '17:20:47 "Player [Zeppelin] was killed by [CB]Rayd at a distance 3 m with weapon AKM"';
begin
  ki:= GetKillInfo(S);
  ListBoxFuncTest.Clear();

  if ki.Success
    then begin
           ListBoxFuncTest.Items.Add('Killer: ' + ki.Killer);
           ListBoxFuncTest.Items.Add('Victim: ' + ki.Victim);
           ListBoxFuncTest.Items.Add('Distance: ' + ki.Distance);
           ListBoxFuncTest.Items.Add('Weapon: ' + ki.Weapon);
         end;
end;
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 13.06.2015, 23:57   #15
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Цитата:
Сообщение от min@y™ Посмотреть сообщение
глузишь лог в стринглист или ещё куда, а потом в цикле берёшь строки из списка и суёшь в функцию параметром S. Функция вернёт структуру TKillInfo. Если поле Success = true, значит строка правильная и можно взять из структуры инфу об убивце, жертве, дистанции и оружии.
Код:
procedure TFormMain.ButtonShitClick(Sender: TObject);
var
  ki: TKillInfo;
const
  S = '17:20:47 "Player [Zeppelin] was killed by [CB]Rayd at a distance 3 m with weapon AKM"';
begin
  ki:= GetKillInfo(S);
  ListBoxFuncTest.Clear();

  if ki.Success
    then begin
           ListBoxFuncTest.Items.Add('Killer: ' + ki.Killer);
           ListBoxFuncTest.Items.Add('Victim: ' + ki.Victim);
           ListBoxFuncTest.Items.Add('Distance: ' + ki.Distance);
           ListBoxFuncTest.Items.Add('Weapon: ' + ki.Weapon);
         end;
end;
Вы меня, конечно, простите, но что-то я под глубокую ночь вообще не соображаю, можете полный пример подсказать? Заранее благодарен
Кирилл12345 вне форума Ответить с цитированием
Старый 14.06.2015, 00:09   #16
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Вы меня, конечно, простите, но что-то я под глубокую ночь вообще не соображаю, можете полный пример подсказать? Заранее благодарен
да ты задолбал. мож подгузник тебе сменить?
гастроном - там!
Изображения
Тип файла: png 12.png (6.1 Кб, 62 просмотров)
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Старый 14.06.2015, 00:34   #17
Кирилл12345
Пользователь
 
Регистрация: 06.07.2012
Сообщений: 12
По умолчанию

Да капец короче

Кирилл12345 вне форума Ответить с цитированием
Старый 14.06.2015, 00:47   #18
min@y™
Цифровой кот
Старожил
 
Аватар для min@y™
 
Регистрация: 29.08.2014
Сообщений: 7,629
По умолчанию

Цитата:
Да капец короче
ну, раз у меня работает, а у тебя - нет, то у кого руки из жопы растут?
Ищи ошибку у себя и/или показываешь, как вызываешь мою магическую фнкцию.
Расскажу я вам, дружочки, как выращивать грибочки: нужно в поле утром рано сдвинуть два куска урана...
min@y™ вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 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