Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Microsoft Office и VBA программирование > Microsoft Office Excel
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 09.01.2011, 14:22   #1
getikalex
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 73
По умолчанию Обработка логов спутникового ТВ сигнала

Прошу помочь в обработке лога работы программы. Речь идет о спутниковом телевидении и обработке ключей канала в потоке. Вот кусочек лога.Он изначально в текстовом txt файле.
Цитата:
[LOG031]2011/01/09 12:16:37 11478 c01 dvbapi: new program number: 0004 (0000:0004 unknown)
[LOG032]2011/01/09 12:16:46 11478 c01 dvbapi: new program number: 283E (ТНТ)
[LOG033]2011/01/09 12:16:46 11478 c01 root (0500&023700/283E/0FA2/4E:5E83/78-0C): found (61 ms) by all - ТНТ
[LOG092]2011/01/09 12:21:48 11478 c01 root (0500&030600/3716/0BBA/4F:8BC8/64-00): not found (59 ms) - 0500:3716 unknown
[LOG093]2011/01/09 12:21:48 11478 c01 root (0500&040610/3716/138A/55:F376/64-00): rejected user ident (120 ms) - 0500:3716 unknown
[LOG000]2011/01/09 12:09:36 11478 c01 root (0500&023700/283E/0FA2/4E:5E83/54-7F): found (806 ms) by all - ТНТ
[LOG037]2011/01/09 12:16:57 11478 c01 root (0500&023700/2842/0FA6/45:39F2/41-B0): found (68 ms) by all - СТС-Москва
[LOG038]2011/01/09 12:16:57 11478 c01 dvbapi: Start descrambling CAID: 0500

Ключ найден только в трех строчках, где есть фраза found (...) а вот в других - где not found, или другие фразы - ключей нет
В каждой строке, где ключ найден - в скобках перед ним - данные канала Caid,Ident,Sid,EcmPid
(0500&023700/283E/0FA2/4E:5E83/78-0C)
из чисел в скобках интересуют только первые четыре числа, т.е 0500 023700 283E 0FA2
Именно эти четверки для случаев когда есть found - надо выделить на отдельном листе (желательно без повторов. Т.е повторные значения четверок, вносить не надо.

В приложении кусок реального лога(oscam), и excel файл(oscam_pids) с логом на первой странице, и желаемым результатом на другой странице. Наверное такой парсинг можно организовать скриптом с построчной обработкой каждой отдельной строки. На форуме видел что-то похожее, но сам не справлюсь.
Вложения
Тип файла: rar oscam.rar (1.6 Кб, 13 просмотров)
Тип файла: rar Oscam_pids.rar (6.1 Кб, 16 просмотров)
getikalex вне форума Ответить с цитированием
Старый 09.01.2011, 15:43   #2
raxp
Старожил
 
Регистрация: 29.09.2009
Сообщений: 9,713
По умолчанию

если вы хотите, чтобы сделали за вас, то в раздел фриланс.
Разработки и научно-технические публикации :: Видеоблог :: Твиттер
Radar systems engineer & Software developer of industrial automation
raxp вне форума Ответить с цитированием
Старый 09.01.2011, 16:44   #3
EugeneS
Форумчанин
 
Регистрация: 06.08.2009
Сообщений: 472
По умолчанию

можно сделать так, см. вложение, кнопка "Start"
Вложения
Тип файла: zip Oscam_pids.zip (15.9 Кб, 13 просмотров)

Последний раз редактировалось EugeneS; 09.01.2011 в 17:03.
EugeneS вне форума Ответить с цитированием
Старый 09.01.2011, 17:16   #4
EducatedFool
Программист VBA
СуперМодератор
 
Аватар для EducatedFool
 
Регистрация: 13.07.2008
Сообщений: 6,856
По умолчанию

Могу предложить несколько иное решение:

Код:
Sub ОбработкаФайла()
    ИмяФайла = GetFilePath("Выберите файл с логами", ThisWorkbook.Path, "Спутниковые логи", "*.log")      ' запрашиваем имя файла
    If ИмяФайла = "" Then Exit Sub    ' выход, если пользователь отказался от выбора файла
    On Error Resume Next: Dim coll As New Collection
    ТекстЛогов = ReadTXTfile(ИмяФайла)
    arr = Split(ТекстЛогов, vbNewLine)    ' разбиваем на строки
    For i = LBound(arr) To UBound(arr)
        txt = arr(i)
        If txt Like "*: found *" Then
            txt = Split(txt, ": found ")(0): txt = Replace(Split(txt, "(")(1), "&", "/")
            arr2 = Split(txt, "/"): txt = arr2(0) & "/" & arr2(1) & "/" & arr2(2) & "/" & arr2(3)
            coll.Add txt, txt
        End If
    Next i
    Application.ScreenUpdating = False
    For Each Item In coll ' выводим уникальные наборы значений на лист
        Range("A" & Rows.Count).End(xlUp).Offset(1).Resize(, 4).Value = Split(Item, "/")
    Next Item
End Sub
Этот макрос выводит диалоговое окно выбора файла лога, после чего выводит на лист подходящие четвёрки значений.

EducatedFool вне форума Ответить с цитированием
Старый 09.01.2011, 17:53   #5
getikalex
Пользователь
 
Регистрация: 13.06.2010
Сообщений: 73
По умолчанию

Большууууущее СПАСИБО.
getikalex вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обработка интернет логов iskurt Общие вопросы Delphi 8 06.01.2010 00:06
обработка логов в Postfix MarinaOlegovna Помощь студентам 1 30.07.2009 15:36
Обработка сигнала - что использовать? gooff Компьютерное железо 3 02.07.2008 12:13
Обработка сигнала - что использовать! gooff Помощь студентам 4 22.06.2008 20:57
Обработка сигнала - что использовать! gooff Общие вопросы C/C++ 2 19.06.2008 17:52