Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.57/7: Рейтинг темы: голосов - 7, средняя оценка - 4.57
 Аватар для lizard
0 / 0 / 0
Регистрация: 20.09.2011
Сообщений: 14

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

10.11.2011, 23:16. Показов 1519. Ответов 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
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
10.11.2011, 23:16
Ответы с готовыми решениями:

std::regex и boost::regex
Что-то я не пойму что реализация их различна ? #include &lt;iostream&gt; #include &lt;string&gt; //#include &lt;regex&gt; //using...

Регулярное выражение boost::regex
Здравствуйте форумчане. Не получается написать регулярное выражения для разбора такой строки: g=p1#s=p1,p2#t=p1 g, s, t - имена...

Boost Regex, работа с указателями
Доброго, пытаюсь разобраться с boost::regex и для удобства решил написать обертку под boost::regex_search(...) Но возникли некие вопросы,...

1
 Аватар для talis
794 / 546 / 61
Регистрация: 11.05.2010
Сообщений: 1,298
Записей в блоге: 1
10.11.2011, 23:20
lizard, смотрите:

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
59
60
61
62
63
#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;
                } // if( boost::regex_search( c, m, infected ) ) 
                
            } // while( !in.eof() )
            
/*-------------------> вот тут уже in.eof() == true <--------------------------------------------- */
            
        } // if( boost::regex_search( s, m, healthy ) )
        
    }// while( !in.eof() )
 
    system( "pause" );
 
}
Код ваш, только оформление подкантовал.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
10.11.2011, 23:20
Помогаю со студенческими работами здесь

Boost regex поиск в массиве
Ффф, мне надо на boost regex искать все совпадения в массиве и выдавать в масиив. Прототип функции не придумал. Пока что. Но, думаю идеи...

Boost::regex не могу сформировать ссылку на паттерн при поиске
Необходимо найти 2 повторяющихся заголовка и объединить некоторое содержимое через replace. Хотел создать выражение для поиска: ...

Вылетает boost::regex в windows forms, в консоли всё нормально
работаю с формой, подключаю &lt;boost/regex.hpp&gt;. Компиляция проходит без ошибок, но когда нажимаю f5 вылетает ошибка: &quot;Debug assertion...

Парсер boost/regex
Всем привет вот возникла сложно с boost/regex начну по порядку. Написав достаточное количество парсеров информации из интернета я понял...

Парсинг html кода с использованием регулярных выражений (в частности boost.regex)
Вечер добрый, уважаемые форумчане! В общем то тема избитая, читал я по ней много, но из темы в тему - только какие то второстепенные...


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

Или воспользуйтесь поиском по форуму:
2
Ответ Создать тему
Новые блоги и статьи
SDL3 для Web (WebAssembly): Обработчик клика мыши в браузере ПК и касания экрана в браузере на мобильном устройстве
8Observer8 02.02.2026
Содержание блога Для начала пошагово создадим рабочий пример для подготовки к экспериментам в браузере ПК и в браузере мобильного устройства. Потом напишем обработчик клика мыши и обработчик. . .
Философия технологии
iceja 01.02.2026
На мой взгляд у человека в технических проектах остается роль генерального директора. Все остальное нейронки делают уже лучше человека. Они не могут нести предпринимательские риски, не могут. . .
SDL3 для Web (WebAssembly): Вывод текста со шрифтом TTF с помощью SDL3_ttf
8Observer8 01.02.2026
Содержание блога В этой пошаговой инструкции создадим с нуля веб-приложение, которое выводит текст в окне браузера. Запустим на Android на локальном сервере. Загрузим Release на бесплатный. . .
SDL3 для Web (WebAssembly): Сборка C/C++ проекта из консоли
8Observer8 30.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
SDL3 для Web (WebAssembly): Установка Emscripten SDK (emsdk) и CMake для сборки C и C++ приложений в Wasm
8Observer8 30.01.2026
Содержание блога Для того чтобы скачать Emscripten SDK (emsdk) необходимо сначало скачать и уставить Git: Install for Windows. Следуйте стандартной процедуре установки Git через установщик. . . .
SDL3 для Android: Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 29.01.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами. Версия v3 была полностью переписана на Си, в. . .
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
SDL3 для Android: Загрузка PNG с альфа-каналом с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru