![]() |
Здравствуйте, у меня такая вот просьба... можете боле-менее подробно описать схему открытия .log файлов и чтения из них данных в Borland C++, как это сделать?
|
Очень туманно задан вопрос. Ответ такой же туманный: открываешь и читаешь.
Если серьезно, я сейчас пишу класс (на QT), который читает в реал-тайме подновляющиеся клиентские логи. Вся фишка в том, чтобы держать лог-файл открытым на чтение и помнить, где в последний раз был указатель конца файла, чтобы не перечитывать все содержимое заново. Другая фишка в том, что клиенты, пишущие в логи, должны открывать их по "a+" и обязательно пользоваться fflush() . Но это моя специфика. Что конкретно Вас интересует? |
hasherfrog
если честно, то в cpp я новичок, но мне нужно просто сделать обработчик лог-файлов, а для этого их нужно соответственно считать. Скорее вопрос сейчас у меня встает в том, что как лучше его обработать в Borland C++, при помощи VCL. А насчет обновляемых клиентских логов это ты классно, когда можно будет поюзать первые релизы? :) |
Еще уточню вопрос. Речь идет о формате лог-файла? Так это очень специфично. В самом общем (и наиболее распространенном) варианте, лог - просто текстовый файл, в котором каждая строка соответствует сообщению (строка - значит заканчивается "\n"). Т.о. считывание лог-файла превращается в простое последовательное считывание строк из файла, вплоть до конца файла. Воспользуйтесь стандартными средствами Borland по работе с файлами/потоками (я давно не писал на Borland C++, все больше QT, ну или MVS, поэтому не помню, как эти классы называются - какой-нибудть CTextSteram), или просто fgets().
Что касается "обработки с помощью VCL", я так подозреваю, тебе нужно просто вывести содержимое в раскрашенном виде? Используй CListView (так, по-моему он называется), где для каждой считанной строки предварительно определи значок и цвет (по содержимому строки). Например, если строка начинается со слова "Warning", покрась ее в оранжевый цвет и прицепи какую нибудь иконку с восклицательным знаком. |
Я сейчас тоже пишу анализатор лога (VC 6.0) и запись его в html
делается вроде не сложно. например мне нужно цветом выделить [user: guest] я ищу '[', и при условии, что, например, следующий символ 'u' а символ+5 == ':' я считываю в память строку, пока не встречу ']' короче, что то типа: if(szFileBuf[dwCurrentByte] == '[' && szFileBuf[dwCurrentByte+3] == '/') { int tiCount = 0; while(szFileBuf[dwCurrentByte] != ']') { szTime[tiCount] = szFileBuf[dwCurrentByte]; dwCurrentByte++; tiCount++; } очень приближенно.... есть наверное и другие методы, но мне влом было думать как сделать и я решил сделать немного по-детски а вообще если ты на билдере пишешь, есть такие вещи как TRegExp - с помощью этого можешь пропарсить любую строку. |
Да, если б конкретнее вопрос задал может я б и не так ответил
|
мне надо написать анализатор лога для WinRoute, там логи идут таким макаром:
ip host метод дата запрос код_ответа входящий_траффик Маза в том, что мне надо подсчитать суммарный, по хостам, по йапи и т.д. Я попытался сделать след. образом: в главном меню есть опция "загрузить лог", он его открывает на чтение, я его прогоняю scanf() считаю траффик, вывожу отчет. Ну там есть еще опция "вывести только по одному IP" и идет лист из чекбоксов, как его заполнить... хз. Я не прошу вас за меня все это писать... мне бы было интересно как получше все это делать... может быть в базу данных занести? хотя 250 мегов не хилый размер для Celeron 533. Я в недоумении... помогите плиз. |
Цитата:
Тогда проходим по всему логу (можно скажем на какую-то дату, но это уже нюансы), фиксируем все уникальные ипы и генерируем список из чекбоксов. Кнопка просмотреть будет иметь обработчик который по чекбоксам будет знать какие ипы ему выводить в итоге. На самом деле лучше наверное просто вывести несколько Edit'ов в которые можно ввести один из четырех (или шести) чисел которые составляют ип и рукодствоваться для вывода уже этими данными... |
ну не знаю... в VC есть специальный "Edit" так и называется IP-Adress ;)
|
Хорошо если так (я Delpher), но это нюансы.
|
Цитата:
|
ты побайтово читаешь или построчно?
|
suxxl
я пока что еще никак не читаю :) но нужно построчно. вопрос: как прочитать построчно файл и выдрать из него переменные? |
Guest, а вам не приходила мысль почитать документацию, справочки, порыть в Сети, помучить поисковые системы? Так будет быстрее, а сейчас пусть вам и опишут всю задачу, в следующий раз в голове ничего не будет для решения новой. Так не бывает, обучение это в первую очередь желание узнать и узнать самому.
|
блин.... пока не встретил \n читай в память. ты вообще слышал про книги что-то?
|
Цитата:
Тыкаем кнопку Load по событию происходит выхов диалога с выбором файла, когда вносится файл, в поле TMemo парсятся данные при помощи scanf, они суммируются, и в конце выводится список по посещенным сайтам, по кол-ву траффика, этот отчет можно сохранить в текстовый файл. Реализовать этот механизм на C, я смогу, но насколько я знаю, библиотека борланда отличается, поэтому я и попросил Вас (All) помочь мне. Подскажите пожалуйста примерный код, который должен обрабатывать файл, или дайте ссылку на хорошую документацию. Цитата:
Заранее благодарен :) |
Вот ведь незадача какая. Мне очень не хочется ни хвалиться, ни дразниться... Я уже давно все написал и использую... Но Я НЕ МОГУ привести здесь свой класс (на самом деле их уже 2 - визуальный со всякими фильтрами и общий для расчета статистик). Дело не только в том, что жаба душит. Я просто не могу. Дать текст полностью - так я ж работаю на дядю. Частично - будет ни фига не понятно. Sorry. Давайте Вы спросите что конкретно у Вас не получается - тогда все дружно помогут. А так ничего хорошего не выйдет.
Что же касается последнего вопроса, вот примерный код. Код:
Удачи. |
2hasherfrog
чем хвалиться? сложностей тут никаких вроде... |
Время: 03:49. |
Время: 03:49.
© OSzone.net 2001-