Форум программистов, компьютерный форум CyberForum.ru
Наши страницы

Парсер лога с использованием boost::regex - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ ввод двумерного массива из файла http://www.cyberforum.ru/cpp-beginners/thread381519.html
как осуществить ввод двумерного массива из файла? как должны размещаться значения в файле? вот такие два вопросика :) заранее всем откликнувшимся спасибо большое:friends:
C++ Помогите написать код программы с использованием функции!!! Реализовать функцию, которая переписывает элементы входного массива в обратном порядке. На вход функция получает указатель на первый элемент массива, а также его размерность. Задано вещественный... http://www.cyberforum.ru/cpp-beginners/thread381517.html
C++ Длина отрезка по координатам вершин
разработать функцию f(x1,y1,x2,y2),каторая вычесляет длину отрезка по координатам вершин (x1,y1) и (x2,y2), и функцию t(a,b,c),которая проверяет, существует ли треугольник с длинами сторон a,b,c/С...
C++ Вывести самое длинное слово и его порядковый номер в исходной строке
Здраствуйте,мне нужно вывести самое длинное слово и его порядковый номер в исходной строке.Спасибо
C++ Двумерные массивы. Процедуры и функции http://www.cyberforum.ru/cpp-beginners/thread381506.html
нужер зделать программку, помогите если сможете: В матрице А (n х n) определите количество строк, элементы ко- торой образуют арифметическую прогрессию. Используйте подпро- грамму проверки...
C++ Как подсчитать вероятность появления каждого символа в тексте. Как подсчитать вероятность появления каждого символа в тексте. Например дана предложение: The method was attributed to Fano, who later published it as a technical report. Как найти вероятность?... подробнее

Показать сообщение отдельно
lizard
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 14

Парсер лога с использованием boost::regex - C++

10.11.2011, 23:16. Просмотров 564. Ответов 1
Метки (Все метки)

Всем привет.

Есть задача пропарсить лог антивирусника с ипользованием boot:: regex, и выдать формат Filename - Diagnosis. Лог не очень удобен, так как записывает все в несколько строк.
Алгоритм: программа находит имя просканированного файла и проверяет будет ли дальше сообщение о вирусах.

Выражения составил, логика работает правильно, но программа выдав ответ по первому файлу закрывается.

Подскажите что неправильно с while`ами?

текст лога:

C++
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
Avira / Windows Version 1.9.150.0
Copyright (c) 2010 by Avira GmbH
All rights reserved.
 
engine set:         8.2.6.84
VDF Version:        7.11.16.66 
 
 
Scan start time: 09.11.2011 23:42:17
Command line: scancl.exe C:\tmp\ --log=C:\log\log 
 
configuration file: C:\avira\scancl.conf
C:\tmp\1.jpg
 Date: 02.11.2011 Time: 11:13:39  Size: 47999
 
C:\tmp\bdc.exe
 Date: 17.10.2011 Time: 21:06:17  Size: 137728
 
C:\tmp\client.exe
 Date: 19.10.2011 Time: 19:47:51  Size: 14336
 
C:\tmp\eicar.com.txt
 Date: 09.11.2011 Time: 23:41:06  Size: 68
 ALERT: [Eicar-Test-Signature] C:\tmp\eicar.com.txt <<< Contains signature of the Eicar-Test-Signature virus
C:\tmp\server.exe
 Date: 18.10.2011 Time: 19:33:52  Size: 14848
 
C:\tmp\settings.ini
 Date: 28.10.2011 Time: 13:04:02  Size: 8192
 
                                                                                
 
Statistics :                
    Directories............... : 1
    Files..................... : 6
        Infected.............. : 1
            Ignored........... : 1
        Warnings.............. : 0
        Suspicious............ : 0
    Infections................ : 1
    Time...................... : 00:00:01
код программы:
C++
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
56
57
58
#include <iostream>
#include <string> 
#include <boost/regex.hpp>
#include <fstream>
 
using namespace std;
const int BUFSIZE = 10000;
int main()
{
 
char buf[BUFSIZE];
std::string name, iname, diagnosis;   
 
static const boost::regex infected("(ALERT:.*?.C:.tmp.*?)+(([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4})+(.<<<.+[a-zA-Z_])");
static const boost::regex healthy("(^C:.tmp.*?)+(([a-zA-Z0-9]+\\.)+[a-zA-Z]{2,4})");
 
ifstream in;
in.open("C:\\log\\avira_log.txt");
 
 
while (!in.eof()) 
{
in.getline(buf, BUFSIZE-1);
std::string s = buf;
    boost::smatch m;
    
    if ( boost::regex_search( s, m, healthy ) ) {
        
                
   name.assign(m[2]);
   cout << "Name: "<< name <<"  diagnosis:";
    
   
   // infected files
  
   while (!in.eof()) 
{
in.getline(buf, BUFSIZE-1);
std::string c = buf;
    
 
    if ( boost::regex_search( c, m, infected ) ) {
        
   iname.assign(m[2]);
   diagnosis.assign(m[4]);
 
   if ( name == iname)
   cout <<  diagnosis << endl;
   else
       cout << "OK"<< endl;
    } 
 }
}
}
 
system("pause");
 
}


Ошибка элементарная где-то, но я не заметил(

Буду благодарен помощи (:
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru