Форум программистов, компьютерный форум, киберфорум
Теория программирования
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 5.00/13: Рейтинг темы: голосов - 13, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7

Программа - парсинг лога.

25.02.2010, 13:15. Показов 2632. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В данный момент учу паскаль, как в учебном центре заочно, так и всевозможные учебные видео. Вобщем-то это не от кого не секрет, и многие знали. А тут вдруг уважаемый мною человек обратился ко мне за помощью:
Оказалось, ему нужна программа, умеющая обрабатывать логи такого вида:
24.02.10 24.02.10 00:48 Получено Coins[1912] от персонажа 'RiD'. Всего на счету: 8154 мнт.

Отсюда нужно чтобы программа обработала число указанное в квадратных скобках (1912 в нашем случае) и ник персонажа, от которого пришли это монеты (Coins=монета).
Запара в том, что персонажей много и логи, забиваемые в программу будут выглядеть как:

24.02.10 24.02.10 00:48 Получено Coins[1912] от персонажа 'RiD2'. Всего на счету: 93234 мнт.
24.02.10 24.02.10 00:48 Получено Coins[1912] от персонажа 'RiD3'. Всего на счету: 93453 мнт.
24.02.10 24.02.10 00:48 Получено Coins[1912] от персонажа 'RiD4'. Всего на счету: 9654 мнт.
24.02.10 24.02.10 00:48 Получено Coins[1912] от персонажа 'RiD5'. Всего на счету: 96454 мнт.
24.02.10 24.02.10 00:48 Получено Coins[1000] от персонажа 'RiD5'. Всего на счету: 9945645 мнт.

Сверху видно, что от персонажа RiD5 мы получили два платежа, значит программа должна выводить суммарное число монет, присланных от одного и того же персонажа...

Например:
rid2 = 1912
rid3 = 1912
rid4 = 1912
rid5 = 2912

Дело в том, что я слишком туп чтобы суметь сделать такое... Помогите пожалуйста, для меня это очень важно... Если это платно, то, пожалуйста, укажите цену...

Заранее благодарю) Надеюсь программа получилась не очень сложной... Старался описать подробно.. Она должна выводить результат, нужно всё это для рейтинга.
[/I][/U]

Добавлено через 1 минуту
Торопился... Перепутал... Извиняюсь) Логи такие будут:
24.02.10 18:52 Перевёл Coins[190] персонажу 'the powerman'. Стоимость отправки 1 мнт. Осталось 7643 мнт. Назначение платежа: 2 номера

Нужно подсчитать кому (the powerman) и сколько (190)

Ещё раз заранее благодарю)
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
25.02.2010, 13:15
Ответы с готовыми решениями:

Парсинг лога
Есть скрипт: gci C:\1 |?{!($_.psiscontainer)} | %{gc "C:\temp.log" | sls -pattern $($_.Name)} Строчки с именем фалов то на ходит,...

Парсинг лога
Доброго времени суток! Прошу помощи профессионалов. Нужен скрипт который распарсит лог: 1) Берём название файла который лежит в папке...

Парсинг лога приложения
Привет всем! Пишу парсер лог-файла стороннего приложения. Схематичный код: while (true) { string...

23
 Аватар для Jazon_deenAlt
4117 / 999 / 191
Регистрация: 09.04.2009
Сообщений: 4,223
25.02.2010, 13:24
Я_За_Доктора, а лог то откуда братса будет?
1
 Аватар для solar_wind
770 / 760 / 59
Регистрация: 06.07.2009
Сообщений: 3,021
25.02.2010, 13:33
Ну технологий распознавания такого текста несколько, самая простая:
1. Выделяешь память с запасом под персонажи (под число и под ник), обнуляешь все числа.
2. Читаешь посимвольно из файла.
3. Если нашел [ то до ] читаешь в строковую переменную
4. читаешь до символа ' , все что дальше добавляешь в другую строковую переменную. И это до тех пор пока не нашел второй символ '
5. В списке персонажей ищешь соответствие, ели его нет добавляешь новый.
6. Число прибавляешь к числу у персонажа, и если нужно заносишь его название.
7. Ну и все, а потом выводишь на экран например.
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
25.02.2010, 21:14
А обязательно на паскале? Просто на perl'е программа совсем простая выйдет

Добавлено через 45 секунд
Ну и если есть такое задание, то выложи сразу фрагмент лога на несколько сотен строк, чтобы те, кому интересно, могли "по живому" отлаживать
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,400
Записей в блоге: 6
25.02.2010, 23:15
15 - 20 минут и почти готова основная процедура: (НЕ ПРОВЕРЯЛ)
Delphi
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
type
  Pmember = ^Tmember;
  Tmember=record
    name:string;
    money:Integer;
  end;
 
procedure LoadList( const filename:string; List:TList );
  var
    p:Pmember;
    txt:TextFile;
    s,sname,smoney:string;
    i:integer;
    flagfind:boolean;
begin
  AssignFile( txt, filename );
  Reset( txt );
  while not eof( txt ) do
  begin
    Readln( txt, s );
 
    // extract name
    sname := s;
    Delete( sname, 1, pos( '''', sname ) );
    i := pos( '''', sname );
    Delete( sname, i, Length( sname )-i );
 
    // extract money
    smoney := s;
    s := 'Стоимость отправки';
    i := pos( s, smoney );
    Delete( smoney, 1, Length( s )+i );
    smoney := Copy( smoney, 1, pos( 'мнт. Осталось' );
 
    // find equ
    flagfind := false;
    for i:=0 to List.Count-1 do
      if Pmember(List.Items[i]).name = sname then
      begin
        Pmember(List.Items[i]).money := Pmember(List.Items[i]).money + StrToInt( smoney );
        flagfind := true;
        break;
      end;
 
    // add new name if not find
    if not flagfind then
    begin
      New( p );
      p.name := sname;
      p.money := StrToInt( smoney );
      List.Add( p );
    end;
  end;
  CloseFile( txt );
end;
Осталось отладить и распечатать уж это сможете?
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 00:01
snake32, на перле код всей программы выглядел бы примерно так. "Примерно", потмоу как у меня нет постоянно практики, но общий смысл понимаю. Это просто демонстрация того, что для специализированных задач более удобными являются специализированные языки, а не универсальные

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
while (<>)
{
  if (/*\[(.*)\]*\'(.*)\'*/)
  {
    @arr{$2} += $4;
  }
}
 
foreach (@arr)
{
  # точно не помню, но как-то в одну строку можно распечатать ассоциативный
  # массив по всем индексам
}
0
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7
26.02.2010, 06:11  [ТС]
Не обязательно на паскале=) Спасибо, будем пробовать.
Логи прикреплю
Вложения
Тип файла: txt многалогав.txt (6.3 Кб, 21 просмотров)
0
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7
26.02.2010, 06:14  [ТС]
Паскаль пишет ошибку( perl ещё не пробовал...
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 09:58
Цитата Сообщение от Я_За_Доктора Посмотреть сообщение
perl ещё не пробовал...
Это не есть готовая программа. Это просто схематично показано, как оно будет выглядеть (для демонстрации того, что выглядеть будет просто)

P.S. Вместо "цитата" нажал "спасибо"
1
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7
26.02.2010, 12:32  [ТС]
Я с perl'ом совсем не знаком=( Догадывался, что это не вся программа, но всё же...)

Добавлено через 29 секунд
ps: Спасибо за спасибо
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 13:16
Цитата Сообщение от Я_За_Доктора Посмотреть сообщение
Догадывался, что это не вся программа
Условно можно считать что вся. Но некорректно написана
0
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7
26.02.2010, 13:24  [ТС]
Ну а вы сможете написать? Буду очень благодарен, особенно если сразу программу выложите...
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 13:29
Для этого книжку по перлу надо будет читать
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,400
Записей в блоге: 6
26.02.2010, 14:07
Я_За_Доктора, сегодня в часиков 11 вечера пришлю вам готовый проект на D7. Раньше не могу - занят другими программерскими дилишками.... и не только.
1
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 14:45
Код программы a.pl:

Perl
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#!/usr/bin/perl
 
while (<>)
{
  if (/(.*)\[(.*)\](.*)\'(.*)\'(.*)/)
  {
    $hash{$4} += $2;
  }
}
 
for $key ( keys %hash )
{
  print "$key => $hash{$key}\n";
}
твой файл обозвал как a.txt. Запуск:

Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
$ ./a.pl < a.txt
bamez => 5676
я_за_доктора => 11654
r1cc0 => 15686
*incide007* => 5000
bames => 1920
fij => 5264
просто я => 886
лопатор => 6443
zverevd => 377
pest => 9112
цтулху фхтагн => 5382
panzerz => 14833
oxig => 8965
fieldy => 462
stal_ker => 1734
webdark => 19000
**изаура** => 37888
murlokotam => 14972
интересный => 1500
лёва => 1045
diesel666 => 1536
burunduchok => 11040
rekord2 => 621
king alex => 10060
легалас => 1197
ultimative_01 => 1125
0 а 0 тигрокрыс => 11100
__47__ie => 468
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,400
Записей в блоге: 6
26.02.2010, 15:15
Evg, так не честно! Ты раньше прочитал книгу по Перлу чем я смог попасть домой. =)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 15:24
А что тебе мешает дома написать по-своему?
0
 Аватар для snake32
3502 / 1685 / 236
Регистрация: 26.02.2009
Сообщений: 8,400
Записей в блоге: 6
26.02.2010, 15:29
А смысл? Результат уже есть. Ну если только в скорости выполнения посоревноваться, но там Си всех порвёт в умелых руках => опять ты выиграл!
0
1 / 1 / 0
Регистрация: 25.02.2010
Сообщений: 7
26.02.2010, 15:30  [ТС]
А можно exe-шником выложить? Я сейчас качаю perl,уже четвёртый по счёту, а с ним та же проблема, что и с паскалем была. У меня 84-битная(ну по крайней мере мой компьютер так думает) винда 7. Поэтому 32-х битные программы он не запускает, пишет несовместима. Программа для совместимости не помогает...

Заранее благодарю)
0
Evg
Эксперт CАвтор FAQ
 Аватар для Evg
21281 / 8305 / 637
Регистрация: 30.03.2009
Сообщений: 22,660
Записей в блоге: 30
26.02.2010, 16:04
Цитата Сообщение от snake32 Посмотреть сообщение
А смысл? Результат уже есть. Ну если только в скорости выполнения посоревноваться, но там Си всех порвёт в умелых руках => опять ты выиграл!
По скорости Си если и порвёт, то совсем чуть-чуть, потому что львиная доля времени уйдёт на "системную" работу (чтение файла или стандартного ввода), которую соптимизировать уже никак нельзя

У варианта на Си есть очевидное преимущество - можно скомпилять исполняемый файл. А всякие "птичьи" языки типа перла - они все интерпретируемые. В теории интерпретатор работает под любой платформой, на практике на любой НЕ-юникосоподобной платформе надо геморроиться

Цитата Сообщение от Я_За_Доктора Посмотреть сообщение
А можно exe-шником выложить? Я сейчас качаю perl,уже четвёртый по счёту, а с ним та же проблема, что и с паскалем была. У меня 84-битная(ну по крайней мере мой компьютер так думает) винда 7. Поэтому 32-х битные программы он не запускает, пишет несовместима. Программа для совместимости не помогает...
exe'шник нельзя, поскольку перл - интерпретируемый язык (а не компилируемый). В теории скорее всего есть какие-то приблуды, позволяющие в один бинарник слепить интерпретатор и программу, но на практике этим редко пользуются. Если есть проблемы с установкой перла, то лучше и вправду иметь вариант на Си, благо такой текст очень просто парсится. С перлом я влез скорее в демонстрационных целях: на форуме идут постоянные баталии про языки программирования, просто хотелось показать, что специализированный язык на специализированной задаче почти всегда окажется более предпочтительным, чем универсальный язык
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
26.02.2010, 16:04
Помогаю со студенческими работами здесь

Парсинг лога. Перевод скрипта с bash в vbs.
Проблема такая. В основном работаю с Linux, но сейчас потребовалось написать скрипт как под Linux, так и под Windows. Скрипт должен от лога...

Нужна помощь гуру в разборе лога отправики и чтения лога
Уважаемые специалисты в ARM Sortix. Нужна помощь в разборе лога отправки и чтения Sortix-R по COM-порту. Соответственно - есть логи...

Ведение лога ошибок, отправка лога на e-mail
подскажите как дописать кусочик. есть vbs фаил,есть запрос , запрос берёт инфу и отправляет на email отчёт надо сделать два лог файла ...

Парсинг PDF в TIF: без Lock программа работает быстрее, но возникает ошибка
Добрый день, подскажите пожалуйста решение проблемы... Делаю прогу для парсинга PDF в TIF использую библиотеку ABCPDF if...

Парсер лога
Доброе утро! Подскажите, пожалуйста, как можно с помощью CMD распарсить лог вида: TN 008 0 00 01 TYPE 3905 CDEN 8D CTYP...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru