Модераторы: xvr
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C++] Обработка лога со звуком 
:(
    Опции темы
pograp
Дата 11.11.2010, 03:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.10.2006
Где: Россия, Москва

Репутация: нет
Всего: нет



Здравствуйте уважаемые форумчане нужна помощь при написании программы. Есть лог в нём пишется дата, оборудование и статус необходимо обработать лог с начала и до конца. 8 железяк и статусы online\offline. Если конечное состояние у оборудования offline необходимо запустить звук (.wav) непрерывно до тех пор пока состояние у всех не будет online. Лог должен обрабатываться каждые 2 секунды. 
Уважаемые гуру помогите в выполнении нелёгкого задания, голова моя уже уничтожена, а навыки программирования затупились из-за 2-х лет отдыха. Пишу эту весчь чисто для себя.
PM MAIL ICQ   Вверх
GrayCardinal
Дата 12.11.2010, 18:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Фигасе
****


Профиль
Группа: Завсегдатай
Сообщений: 3039
Регистрация: 9.11.2003

Репутация: 8
Всего: 58



И в чём должна выражаться "помощь" ?


--------------------
PM MAIL WWW   Вверх
pograp
Дата 12.11.2010, 22:22 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.10.2006
Где: Россия, Москва

Репутация: нет
Всего: нет



Ну сейчас я уже понял некоторый момент как выделить допустим по хосту. grep HOSTNAME. Сейчас есть вопрос необходимо поставить каретку в конец файла и обработать строку и поставить условие есть строка пустая обработать следующую строку. Обработать нужно последнее слово оно же статус и дать хотябы ответ. Пример лога
12.11.2010 22:18 HOST: Servak1 192.168.0.1 status: Online 
Просьба помочь кодом или же где посмотреть на похожие работы варианты и т.д.. Мой мозг на момент написания первого поста был убит данной проблемой. С потоками разобрался с другими пакостями жизни разобрался, но лог обработать не смог - стыдно...
PM MAIL ICQ   Вверх
bsa
Дата 12.11.2010, 23:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



А причем тут С++? Это проще сделать на shell.
PM   Вверх
pograp
Дата 13.11.2010, 00:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.10.2006
Где: Россия, Москва

Репутация: нет
Всего: нет



Понимаю что баш рулит, но я хочу научиться в С++ далее создать что-то вроде wiki или блог на гугле том же самом с моим личным опытом. Или же поделиться с другим блогописателем. Про программирование под линукс нету почти ничего а описания создания обработчика и кода - прорыв.
PM MAIL ICQ   Вверх
bsa
Дата 13.11.2010, 13:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Код
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
#include <iterator>
#include <cctype>
#include <cstdlib>

void playSound()
{
   std::ifstream wav("/path/to/file.wav", std::ios::binary | std::ios::in);
   std::ofstream dsp("/dev/dsp", std::ios::binary | std::ios::out);
   if ( !(wav.is_open() && dsp.is_open()) )
      return; //failed to open files
   char buffer[256];
   while(wav.read(buffer, sizeof(buffer)))
       dsp.write(buffer, wav.gcount());
}

int main()
{
   std::ifstream file("/path/to/file.log");
   for(;;) {
      std::string line;
      bool need_signal = false;
      while(std::getline(file, line)) {
         if (line.empty())
            continue; //line empty
         std::string host;
         std::string status;
         {
            std::vector<std::string> words;
            std::istringstream stream(line);
            std::copy(std::istream_iterator<std::string>(stream), std::istream_iterator<std::string>(), std::back_inserter(words));
            if (words.size() < 7)
               continue;
            host = words[3];
            status = words.back();
            std::transform(status.begin(), status.end(), status.begin(), &tolower);
         }
         if (status == "offline")
            playSound();
      }
      sleep(1);
   }
   return 0;
}

PM   Вверх
pograp
Дата 14.11.2010, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 53
Регистрация: 29.10.2006
Где: Россия, Москва

Репутация: нет
Всего: нет



Спасибо большое!!! Не могли бы Вы написать пояснения к коду (часть обработка текста).
Вечером скину тоже самое но на баше.
PM MAIL ICQ   Вверх
bsa
Дата 14.11.2010, 19:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 16
Всего: 196



Цитата(pograp @  14.11.2010,  16:05 Найти цитируемый пост)
Вечером скину тоже самое но на баше. 
зачем? раздел по С/С++.

Цитата(pograp @  14.11.2010,  16:05 Найти цитируемый пост)
Не могли бы Вы написать пояснения к коду (часть обработка текста).
Строка 27: читаем файл построчно пока он не кончится
Строка 35: копируем все слова из строки в массив

PM   Вверх
xvr
Дата 15.11.2010, 15:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 7046
Регистрация: 28.8.2007
Где: Дублин, Ирландия

Репутация: 20
Всего: 223



Цитата(bsa @  13.11.2010,  13:42 Найти цитируемый пост)
if (status == "offline")
Я так понял, что ТС нужно отслеживать состояние по каждому серверу отдельно, и гудеть, если есть какие то сервера в offline.

2 ТС: Парсь лог построчно (bsa нарисал как). Название сервера и состояние выделяй с помощью regex'пов (pcre, boost::regex, regex.h - на выбор). Все offline сервера складывай в set<string>, online - удаляй оттуда. Если в конце обработки set не пустой - надо гудеть  smile 



Это сообщение отредактировал(а) xvr - 15.11.2010, 15:48
PM MAIL   Вверх
MAKCim
Дата 15.11.2010, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Воін дZэна
****


Профиль
Группа: Экс. модератор
Сообщений: 5644
Регистрация: 10.12.2005
Где: Менск, РБ

Репутация: 84
Всего: 207



а лучше это сделать на питоне например ;)


--------------------
Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі ©

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "С/С++: Программирование под Unix/Linux"
xvr
  • Проставьте несколько ключевых слов темы, чтобы её можно было легче найти.
  • Не забывайте пользоваться кнопкой "Код".
  • Вопросы мобильной разработки тут
  • Телепатов на форуме нет! Задавайте чёткий, конкретный и полный вопрос. Указывайте полностью ошибки компилятора и компоновщика.
  • Новое сообщение должно иметь прямое отношение к разделу форума. Флуд, флейм, оффтопик запрещены.
  • Категорически запрещается обсуждение вареза, "кряков", взлома программ и т.д.

Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, xvr.

 
 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Программирование под Unix/Linux | Следующая тема »


 




[ Время генерации скрипта: 0.0706 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.