1 (изменено: Zeirram, 2013-07-15 11:22:46)

Тема: AHK: обработка протокола\лога

привет)

опыта программирования немного, прошу помощи с сабжем.
есть протокол вида:

событие_неважно время
событие_важно_имя1 время
событие_неважно время
метка_начало время
событие_имя1 время
событие_имя2 время
событие_имя3 время
метка_конец время
событие_неважно время
событие_неважно время
событие_важно_имя2 время

необходим отчет вида:
1. событие_имя1 + событие_имя2 + событие_имя3 : время начала (по метка_начало): время конца (по метка_конец): длительность
2. событие_важно_имя1 : время
3. событие_важно_имя2 : время

в лоб сделанный мной сложный цикл чересчур громоздкий и малочитаемый, и вообще, я путаюсь в скобках)
как можно проще?

2

Re: AHK: обработка протокола\лога

Чтобы что то с этим сделать, нужен точный синтаксис\пример лога.

По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui

3

Re: AHK: обработка протокола\лога

сильно разжевывать необязательно, хотя бы пните в сторону правильного алгоритма)
все строки в логи такие:


<    01.07.2013 00:21:10    1.wav     00:00:21

4 (изменено: serzh82saratov, 2013-07-17 12:40:12)

Re: AHK: обработка протокола\лога

пните в сторону


var =
(
событие_неважно      00:00:21
событие_важно_имя1      00:00:21
событие_неважно      00:00:21
метка_начало      01:00:21
событие_имя1      00:00:21
событие_имя2      00:00:21
событие_имя3      00:00:21
метка_конец      00:59:59
событие_неважно      00:00:21
событие_неважно      00:00:21
событие_важно_имя2      05:00:21
)

RegExMatch(var, "метка_начало\s+(\d+:\d+:\d+)\R(.*?)метка_конец\s+(\d+:\d+:\d+)\R", Match)
Res := "1. " RegExReplace(Match2, "\s+\d+:\d+:\d+\R", " + "), Res := RegExReplace(Res, "\+ $", ":")
Res .= " время начала " Match1 " : время конца " Match3
Res .= " : длительность " DifferenceTime(Match1, Match3) "`n", Pos := 1 
While Pos 
    Pos := RegExMatch(var, "m`a).*(событие_важно.*?)\s+(\d+:\d+:\d+)$", Match, Pos)
    , (Pos) ? (Res .= A_Index+1 ". " Match1 " : " Match2 "`n", ++Pos) : (Res := Rtrim(Res, "`n"))  

MsgBox % Res


 ; === DifferenceTime ===


DifferenceTime(sT, eT)  {   
    sT := A_YYYY A_MM A_DD RegExReplace(sT, ":") 
    Time := Time2 := A_YYYY A_MM A_DD RegExReplace(eT, ":") 
    EnvSub, Time, sT, Second 
    If Time >= 0
        Return Format(Time)
    Time2 += 1, days
    EnvSub, Time2, sT, Second
    Return Format(Time2)
}

Format(sec) {
    H := sec // 3600, H := StrLen(H) = 1 ? 0 H : H
    M := Mod(sec, 3600) // 60, M := StrLen(M) = 1 ? 0 M : M 
    S := Mod(sec, 60), S := StrLen(S) = 1 ? 0 S : S 
    Return H ":" M ":" S
}  
По вопросам возмездной помощи пишите на E-Mail: serzh82saratov@mail.ru Telegram: https://t.me/sergiol982
Win10x64 AhkSpy, Hotkey, ClockGui