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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 07.10.2011, 08:44   #1
CrazyTetra
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 4
По умолчанию Парсер логов

Есть программа (игра) которая пишет логи с достаточно большой скоростью. Файл открыт ей постоянно (поток). Как можно из открытого файла брать последнюю строку? Надо в последней добавленной строке найти соответствие, но это уже второстепенно. Умеет ли дельфи открывать файлы которые уже открыты?
Вот пример нашел, повесил на таймер, но при запуске игры пишет что файл занят (

Код:
function GetLastRow(fromfile: string): string;
 var
  LenToRead : WORD;
  FS : TFileStream;
  SL : TStringList;
 begin
  result:='';
  FS := TFileStream.Create(fromfile,fmOpenRead);
  try
   if FS.Size = 0 then Exit ;
   LenToRead := FS.Size ;
   if LenToRead > 100 then LenToRead := 100;
   FS.Seek(FS.Size-100,soBeginning);
   SL:=TStringList.Create;
   SL.LoadFromStream(FS);
   if SL.Count>0 then result:=SL[SL.count-1];
   Form1.Memo1.Lines.Add(result);
  finally
    FS.Free;
    SL.Free;
  end;
 end;


___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Последний раз редактировалось Serge_Bliznykov; 07.10.2011 в 09:47.
CrazyTetra вне форума Ответить с цитированием
Старый 07.10.2011, 12:05   #2
JUDAS
фонатик DELPHI
Форумчанин
 
Аватар для JUDAS
 
Регистрация: 14.01.2008
Сообщений: 714
По умолчанию

Ответ FS := TFileStream.Create(fromfile,fmOpenR ead or fmShareDenyWrite);
95% сбоев и ошибок приложений, находится в полу метрах от монитора
JUDAS вне форума Ответить с цитированием
Старый 07.10.2011, 20:54   #3
CrazyTetra
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от JUDAS Посмотреть сообщение
Ответ FS := TFileStream.Create(fromfile,fmOpenR ead or fmShareDenyWrite);
Получилось но встал другой вопрос. Как декодировать кодировку? А то отображение получается такое ( А должно быть так

(1318006328)[Fri Oct 07 20:52:08 2011] \aPC -1 Роуэл:Роуэл\/a говорит Level_90 (9): "в х2 башню группой, 1 место - менек"
(1318006346)[Fri Oct 07 20:52:26 2011] \aPC 693204 Амиэль:Амиэль\/a говорит: "Приветствую, !"
(1318006348)[Fri Oct 07 20:52:28 2011] \aPC -1 Зелтрон:Зелтрон\/a говорит Аукцион (1): "то есть не руки мыл?"
(1318006387)[Fri Oct 07 20:53:07 2011] \aPC -1 Обрыгай:Обрыгай\/a говорит Аукцион (1): "мыло было тока хозяйственное?"
(1318006398)[Fri Oct 07 20:53:18 2011] \aPC -1 Роуэл:Роуэл\/a говорит Level_90 (9): "в х2 башню группой, 1 место - менек"
(1318006430)[Fri Oct 07 20:53:50 2011] \aPC -1 Рагг:Рагг\/a говорит Аукцион (1): "Слушай Димкатээр , ты кому угодно мозг вынесешь("
(1318006445)[Fri Oct 07 20:54:05 2011] \aPC -1 Зелтрон:Зелтрон\/a говорит Аукцион (1): "у тебя его нет("
(1318006460)[Fri Oct 07 20:54:20 2011] \aPC -1 Рагг:Рагг\/a говорит Аукцион (1): "Кто сказал ?"

CrazyTetra вне форума Ответить с цитированием
Старый 07.10.2011, 20:58   #4
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Так выясните какая кодировка и раскодируйте. Визуально на UTF-8 похоже, могу и ошибиться
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.10.2011, 21:01   #5
CrazyTetra
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 4
По умолчанию

Цитата:
Сообщение от Аватар Посмотреть сообщение
Так выясните какая кодировка и раскодируйте. Визуально на UTF-8 похоже, могу и ошибиться
Это и есть UTF-8 без BOM.
CrazyTetra вне форума Ответить с цитированием
Старый 07.10.2011, 21:03   #6
Аватар
Старожил
 
Аватар для Аватар
 
Регистрация: 17.11.2010
Сообщений: 18,922
По умолчанию

Ну тогда UTF8Decode, Utf8ToAnsi
Если бы архитекторы строили здания так, как программисты пишут программы, то первый залетевший дятел разрушил бы цивилизацию
Аватар вне форума Ответить с цитированием
Старый 07.10.2011, 22:55   #7
CrazyTetra
Новичок
Джуниор
 
Регистрация: 07.10.2011
Сообщений: 4
По умолчанию

И остался один вопросик. Как сделать так что бы эта функция не дублировала сообщения. Я так понимаю алгоритм такой.
Повесить на таймер эту функцию, выполнить ее первый раз.
Записать FS.Size и на втором выполнении по таймеру сравнить изменилось ли это значение. если не изменилось то ничего не делать, если изменилось то выполнить функцию еще раз. Только что то реализовать не могу это условие (((
Вот сейчас как все

function GetLastRow(fromfile: string): string;
var
LenToRead : WORD;
FS : TFileStream;
SL : TStringList;
begin
result:='';
FS := TFileStream.Create(fromfile,fmOpenR ead or fmShareDenyNone);
try
if FS.Size = 0 then Exit ;
LenToRead := FS.Size ;
if LenToRead > 100 then LenToRead := 100;
FS.Seek(FS.Size-300,soBeginning);
SL:=TStringList.Create;
SL.LoadFromStream(FS);
if SL.Count>0 then result:=SL[SL.count-1];
Form1.Memo1.Lines.Add(UTF8Decode(re sult));
finally
FS.Free;
SL.Free;
end;
end;



procedure TForm1.Timer1Timer(Sender: TObject);
begin
GetLastRow('d:\Games\Sony Online Entertainment\Installed Games\EverQuest II\logs\Barren Sky\eq2log_Лясы.txt');
end;
CrazyTetra вне форума Ответить с цитированием
Ответ


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

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка логов спутникового ТВ сигнала getikalex Microsoft Office Excel 4 09.01.2011 17:53
Компонент для вывода логов ProESM Общие вопросы Delphi 5 27.09.2010 22:05
Как добраться до логов Винды? puzik_off Win Api 7 24.02.2010 09:47
Обработка интернет логов iskurt Общие вопросы Delphi 8 06.01.2010 00:06
обработка логов в Postfix MarinaOlegovna Помощь студентам 1 30.07.2009 15:36