Вверх ↑
Этот топик читают: Гость
Ответов: 7
Рейтинг: 1
#1: 2012-11-23 11:23:18 ЛС | профиль | цитата
Вобшем задался вопросом возможно ли сделать программу которая бы анализировала файлы типа *.log да и только те которые мне надо. Программа должна находить: PlayerKilled *1 killed *2
  • и создавать отдельный файл (имя файла лога который был анализирован).txt с вот с таким содержимым *1
  • и желательно сделать что бы не повторялось, а писало сколько раз было найдено. Примерно так *1
  • 1 (Если было замечено 1 раз). Если было замечено 2 раза то *1
  • 2 и т.д
    Можно хотя бы примерную схему программы, хотелось бы увидеть как это будет выглядеть.

    *1, *2 - Ник 1 и 2 игрока. Которые могут изменятся.
  • - То с чего был убит. Изменяется в зависимости от того с какого оружия был убит другой игрок.
    Сам лог находится у меня на машине, а не на хосте.


  • карма: 0

    0
    Ответов: 5446
    Рейтинг: 323
    #2: 2012-11-23 11:42:02 ЛС | профиль | цитата
    Pro_X7_Gaming, изучаем матчасть. Для начала с помощью Position (или SearchInFile, если логи большие, а памяти мало) выюираем строки, содержащие "PlayerKilled", потом с помощью MultiStrPart разбиваем строку на части по символу " " (пробел). Выбираем нужные части строки и пишем в txt ( FileStream, DataToFile).

    Если хочется считать повторения, то добавляем в схему StrList и IntegerArray, и после MultiStrPart проверяем, есть ли такой ник (точка doGetIndex), если есть - то увеличиваем значение в соответствующей ячейке IntegerArray-я (компонент ArrayRW и Math), если нет - добавляем имя в StrList, а в IntegerArray - число 1.
    После того, как прочитали весь log-файл - с помощью ArrayEnum и FormatStr формируем строки, которые и пишем в файл.

    Вот как-то так.
    карма: 1

    3
    Голосовали:Tad, Ex_, foksov
    Ответов: 7
    Рейтинг: 1
    #3: 2012-11-24 10:38:51 ЛС | профиль | цитата
    code_29604.txt

    Кажется что я что то делаю не правильно
    карма: 0

    0
    файлы: 1code_29604.txt [787B] [88]
    Ответов: 1536
    Рейтинг: 176
    #4: 2012-11-24 11:04:34 ЛС | профиль | цитата
    Не знаю как iarspider, но я ничего не понял. Объясни более последовательно. Выложи эти файл-логи как образцы. Выложи и финальный файл(ы), с содержимым которого, ты хотел бы получить в результате. Нарисуй, в конце концов, свой вопрос. И главный вопрос, зачем тебе это нужно? Это поможет найти, быть может, оптимальный ход решения задачи.
    карма: 1
    Не так страшна ошибка, как опасность её не заметить.

    0
    Ответов: 7
    Рейтинг: 1
    #5: 2012-11-24 11:23:06 ЛС | профиль | цитата
    ser_davkin писал(а):
    Не знаю как iarspider, но я ничего не понял. Объясни более последовательно. Выложи эти файл-логи как образцы и финальный файл(ы), с содержимым которого, ты хотел бы получить в результате. Нарисуй, в конце концов, свой вопрос.


    http://forum.hiasm.com/forum_serv.php?q=56&id=3388

    Вот так сойдет?
    карма: 0

    0
    Ответов: 8930
    Рейтинг: 823
    #6: 2012-11-24 11:36:03 ЛС | профиль | цитата
    Pro_X7_Gaming, при пользовании файлообмена желательно называть помещаемые файлы не используя кирилицу.
    ser_davkin, [flood]скорее всего коллеге надо в другой раздел [/flood]
    карма: 19

    0
    Разработчик
    Ответов: 26164
    Рейтинг: 2127
    #7: 2012-11-24 12:42:13 ЛС | профиль | цитата
    Pro_X7_Gaming писал(а):
    Вот так сойдет?

    А вот так

    
    
    Add(MainForm,2953706,63,140)
    {
    Width=423
    Height=94
    }
    Add(StrList,15424801,721,273)
    {
    FileName="20121123_events.txt"
    Point(doSort)
    }
    Add(Button,11584877,63,182)
    {
    Left=180
    Top=30
    TabOrder=-1
    Caption="Filtered"
    link(onClick,10378579:doEvent1,[])
    }
    Add(BlockFind,4059547,378,182)
    {
    StartBlock="PlayerKilled"
    EndBlock="]"
    link(onSearch,2288523:doReplace,[])
    }
    Add(Charset,6235083,329,182)
    {
    Type=9
    link(onCharset,4059547:doSearch,[])
    }
    Add(FileStream,10959428,231,182)
    {
    FileName="20121123_events.log"
    link(onLoad,14499661:doConvert,[])
    }
    Add(StreamConvertor,14499661,280,182)
    {
    Mode=6
    link(onResult,6235083:doCharset,[])
    }
    Add(Hub,10378579,119,182)
    {
    OutCount=6
    link(onEvent1,10959428:doOpen,[])
    link(onEvent2,10959428:doClose,[])
    link(onEvent3,4766785:doCount,[(216,202)(216,265)])
    link(onEvent4,15424801:doSort,[(208,209)(208,321)])
    link(onEvent5,15424801:doSave,[(200,216)(200,314)])
    link(onEvent6,1158065:doMessage,[(192,223)(192,342)])
    }
    Add(Replace,2288523,427,182)
    {
    SubStr="PlayerKilled9"
    link(onReplace,16660670:doSearch,[])
    }
    Add(StrList,4414373,525,189)
    {
    }
    Add(ArrayCountRepeats,4766785,539,259)
    {
    link(onCount,14185035:doStr,[])
    link(Array,4414373:Array,[])
    }
    Add(BlockFind,16660670,476,182)
    {
    IncludeBlock=1
    Delete=0
    StartBlock=" "
    EndBlock="["
    link(onEndSearch,4414373:doAdd,[])
    }
    Add(MT_String,14185035,588,259)
    {
    Delimeter=" "
    link(onResult,3424103:doEvent1,[])
    }
    Add(Message,1158065,210,336)
    {
    Message="End of Filtered"
    }
    Add(Edit,3612959,721,189)
    {
    Left=5
    Top=5
    Width=395
    Cursor=1
    Text=""
    }
    Add(Hub,3424103,637,259)
    {
    OutCount=3
    link(onEvent1,3612959:doText,[(679,265)(679,195)])
    link(onEvent2,7177860:doProcessMessages,[(686,272)(686,237)])
    link(onEvent3,15424801:doAdd,[])
    }
    Add(Application,7177860,721,231)
    {
    Wait=1
    }


    А вот так с файловым диалогом и просмотром результата в Memo

    
    Add(MainForm,2953706,63,140)
    {
    Width=542
    Height=375
    Caption="Log_Filtered"
    Position=1
    }
    Add(StrList,15424801,847,273)
    {
    Point(doSort)
    link(FileName,7805996:Var2,[])
    }
    Add(Button,11584877,63,182)
    {
    Left=235
    Top=310
    Width=60
    TabOrder=-1
    Caption="Filtered"
    link(onClick,10378579:doEvent1,[])
    }
    Add(BlockFind,4059547,462,182)
    {
    StartBlock="PlayerKilled"
    EndBlock="]"
    link(onSearch,2288523:doReplace,[])
    }
    Add(Charset,6235083,413,182)
    {
    Type=9
    link(onCharset,4059547:doSearch,[])
    }
    Add(FileStream,10959428,315,182)
    {
    FileName="20121123_events.log"
    link(onLoad,14499661:doConvert,[])
    }
    Add(StreamConvertor,14499661,364,182)
    {
    Mode=6
    link(onResult,6235083:doCharset,[])
    }
    Add(Hub,10378579,119,182)
    {
    OutCount=7
    link(onEvent1,2828444:doExecute,[(161,188)(161,139)])
    link(onEvent2,10959428:doClose,[])
    link(onEvent3,4766785:doCount,[(216,202)(216,265)])
    link(onEvent4,15424801:doSort,[(208,209)(208,321)])
    link(onEvent5,15424801:doSave,[(200,216)(200,314)])
    link(onEvent6,1158065:doMessage,[(192,223)(192,342)])
    link(onEvent7,5443624:doLoad,[(184,230)(184,412)])
    }
    Add(Replace,2288523,511,182)
    {
    SubStr="PlayerKilled9"
    link(onReplace,16660670:doSearch,[])
    }
    Add(StrList,4414373,609,189)
    {
    }
    Add(ArrayCountRepeats,4766785,623,259)
    {
    link(onCount,14185035:doStr,[])
    link(Array,4414373:Array,[])
    }
    Add(BlockFind,16660670,560,182)
    {
    IncludeBlock=1
    Delete=0
    StartBlock=" "
    EndBlock="["
    link(onEndSearch,4414373:doAdd,[])
    }
    Add(MT_String,14185035,672,259)
    {
    Delimeter=" "
    link(onResult,3424103:doEvent1,[])
    }
    Add(Message,1158065,210,336)
    {
    Message="End of Filtered"
    }
    Add(Edit,3612959,805,189)
    {
    Left=5
    Top=285
    Width=515
    Cursor=1
    Text=""
    }
    Add(Hub,3424103,721,259)
    {
    OutCount=3
    link(onEvent1,3612959:doText,[(763,265)(763,195)])
    link(onEvent2,7177860:doProcessMessages,[(770,272)(770,237)])
    link(onEvent3,15424801:doAdd,[])
    }
    Add(Application,7177860,805,231)
    {
    Wait=1
    }
    Add(ODialog,2828444,182,133)
    {
    Filter="*.log|*.log"
    link(onExecute,5741477:doEvent1,[])
    }
    Add(Hub,5741477,238,133)
    {
    link(onEvent1,5196492:doSplit,[])
    link(onEvent2,10959428:doOpen,[(284,146)(284,188)])
    }
    Add(StrCat,6925969,854,133)
    {
    Str2=".txt"
    }
    Add(MultiStrPart,5196492,315,133)
    {
    Char="."
    Count=1
    Direct=1
    link(onSplit,6925969:doStrCat,[])
    }
    Add(Memo,5443624,245,378)
    {
    Left=5
    Top=5
    Width=515
    Height=275
    Font=[Courier New,10,1,0,204]
    ScrollBars=3
    link(FileName,7805996:Var1,[(258,229)])
    }
    Add(GetDataEx,7805996,854,224)
    {
    link(Data,6925969:Result,[])
    }

    карма: 22

    0
    Ответов: 1536
    Рейтинг: 176
    #8: 2012-11-24 13:32:07 ЛС | профиль | цитата
    Или вариант от меня:
    Add(MainForm,2953706,140,147)
    {
    Width=1000
    Height=596
    }
    Add(Memo,16070677,490,70)
    {
    Left=10
    Top=30
    Width=435
    Height=510
    ScrollBars=3
    }
    Add(Button,973647,315,161)
    {
    Left=450
    Top=45
    Width=35
    Height=155
    Caption=">>"
    link(onClick,6976379:doEvent1,[])
    }
    Add(StrMask,1883249,448,175)
    {
    Mask="*PlayerKilled*"
    link(onTrue,14755937:doSplit,[])
    }
    Add(ArrayEnum,16202321,399,175)
    {
    link(onItem,1883249:doCompare,[])
    link(onEndEnum,3768074:doEvent1,[(442,188)(442,265)])
    link(Array,16070677:Array,[(405,149)(510,149)])
    }
    Add(StrList,7536952,770,182)
    {
    Point(doSort)
    }
    Add(MultiStrPart,2555795,546,182)
    {
    Char=" "
    Count=1
    link(onSplit,7618220:doSearch,[])
    }
    Add(FormatStr,1332937,644,182)
    {
    link(onFString,4728640:doReplace,[])
    link(Str1,2555795:Part1,[(650,170)(636,170)(636,225)(552,225)])
    }
    Add(MultiStrData,14755937,497,182)
    {
    Char=" "
    From=4
    Count=1
    link(onPart1,2555795:doSplit,[])
    }
    Add(BlockFind,7618220,595,182)
    {
    StartBlock="["
    EndBlock="]"
    link(onSearch,1332937:doString,[])
    }
    Add(Replace,4728640,686,182)
    {
    SubStr=" | -HEADSHOT-"
    link(onReplace,7536952:doAdd,[])
    }
    Add(ListBox,9452010,924,266)
    {
    Left=495
    Top=30
    Width=475
    Height=505
    }
    Add(ArrayCountRepeats,16085781,784,266)
    {
    link(onCount,10526269:doStr,[])
    link(Array,7536952:Array,[])
    }
    Add(Hub,6976379,371,161)
    {
    OutCount=3
    link(onEvent1,9452010:doClear,[(896,167)(896,279)])
    link(onEvent2,7536952:doClear,[(741,174)(741,195)])
    link(onEvent3,16202321:doEnum,[])
    }
    Add(MT_String,10526269,847,266)
    {
    Delimeter=" "
    link(onResult,9452010:doAdd,[])
    }
    Add(Button,7753693,182,301)
    {
    Left=500
    Top=10
    Width=95
    Caption="Save"
    link(onClick,8282911:doExecute,[])
    }
    Add(SDialog,8282911,287,301)
    {
    Filter="Text|*.txt"
    FileName=""
    Point(FileName)
    link(onExecute,9452010:doSave,[])
    link(FileName,5196492:Part1,[])
    }
    Add(ODialog,1006367,182,91)
    {
    Filter="Log|*.log"
    FileName=""
    link(onExecute,9822594:doEvent1,[])
    }
    Add(Button,13105568,140,91)
    {
    Left=10
    Top=10
    Width=120
    Caption="Open"
    link(onClick,1006367:doExecute,[])
    }
    Add(Hub,3768074,735,259)
    {
    link(onEvent1,7536952:doSort,[(759,265)(759,230)])
    link(onEvent2,16085781:doCount,[])
    }
    Add(Charset,6746549,434,91)
    {
    Type=9
    link(onCharset,16070677:doText,[])
    }
    Add(FileStream,10959428,336,91)
    {
    link(onLoad,14499661:doConvert,[])
    }
    Add(StreamConvertor,14499661,385,91)
    {
    Mode=6
    link(onResult,6746549:doCharset,[])
    }
    Add(MultiStrPart,5196492,287,126)
    {
    Char="."
    Count=1
    }
    Add(Hub,9822594,224,91)
    {
    link(onEvent1,10959428:doOpen,[])
    link(onEvent2,5196492:doSplit,[(262,104)(262,132)])
    }
    карма: 1
    Не так страшна ошибка, как опасность её не заметить.

    0
    Разработчик
    Ответов: 26164
    Рейтинг: 2127
    #9: 2012-11-24 13:36:08 ЛС | профиль | цитата
    ser_davkin писал(а):
    Или вариант от меня:

    Че-то я не понял, где у тебя читается log, и как ты умудряешься его напрямую использовать в UNICODE
    Или ты прелагаешь челу предварительно конвертить log в txt -- ну, это уже совсем не интересно
    карма: 22

    0
    Ответов: 16884
    Рейтинг: 1239
    #10: 2012-11-24 13:41:26 ЛС | профиль | цитата
    ser_davkin, садись два. Ты открой log-файл, а не текстовый.
    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Ответов: 1536
    Рейтинг: 176
    #11: 2012-11-24 13:53:17 ЛС | профиль | цитата
    nesco писал(а):
    где у тебя читается log
    Tad писал(а):
    Ты открой log-файл, а не текстовый.
    Блин, забыл, что я имею дело с log-файлом. У меня сначало в Memo были скопированы данные с log-файла. А потом я просто очистил это поле и добавил диалоги загрузки и сохранения.
    Исправил.
    карма: 1
    Не так страшна ошибка, как опасность её не заметить.

    0
    Разработчик
    Ответов: 26164
    Рейтинг: 2127
    #12: 2012-11-24 14:08:59 ЛС | профиль | цитата
    ser_davkin писал(а):
    Исправил

    Перебор строк в Memo, ИМХО, не самый быстрый способ, кстати
    Прямой поиск в тексте гораздо быстрее работает
    карма: 22

    0
    Ответов: 1536
    Рейтинг: 176
    #13: 2012-11-24 14:30:24 ЛС | профиль | цитата
    nesco писал(а):
    Перебор строк в Memo, ИМХО, не самый быстрый способ
    Сделал прямой поиск:

    Add(MainForm,2953706,105,224)
    {
    Width=1000
    Height=596
    }
    Add(Memo,16070677,448,112)
    {
    Left=10
    Top=30
    Width=435
    Height=510
    ScrollBars=3
    }
    Add(StrList,7536952,756,182)
    {
    Point(doSort)
    }
    Add(MultiStrPart,2555795,546,182)
    {
    Char=" "
    Count=1
    link(onSplit,7618220:doSearch,[])
    }
    Add(FormatStr,1332937,644,182)
    {
    link(onFString,4728640:doReplace,[])
    link(Str1,2555795:Part1,[(650,170)(636,170)(636,225)(552,225)])
    }
    Add(MultiStrData,14755937,497,182)
    {
    Char=" "
    From=1
    Count=1
    link(onPart1,2555795:doSplit,[])
    }
    Add(BlockFind,7618220,595,182)
    {
    StartBlock="["
    EndBlock="]"
    link(onSearch,1332937:doString,[])
    }
    Add(Replace,4728640,686,182)
    {
    SubStr=" | -HEADSHOT-"
    link(onReplace,7536952:doAdd,[])
    }
    Add(ListBox,9452010,875,266)
    {
    Left=495
    Top=30
    Width=475
    Height=505
    }
    Add(ArrayCountRepeats,16085781,770,266)
    {
    link(onCount,10526269:doStr,[])
    link(Array,7536952:Array,[])
    }
    Add(MT_String,10526269,819,266)
    {
    Delimeter=" "
    link(onResult,9452010:doAdd,[])
    }
    Add(Button,7753693,161,301)
    {
    Left=500
    Top=10
    Width=95
    Caption="Save"
    link(onClick,8282911:doExecute,[])
    }
    Add(SDialog,8282911,217,301)
    {
    Filter="Text|*.txt"
    FileName=""
    Point(FileName)
    link(onExecute,9452010:doSave,[])
    link(FileName,5196492:Part1,[])
    }
    Add(ODialog,1006367,140,161)
    {
    Filter="Log|*.log"
    FileName=""
    link(onExecute,9822594:doEvent1,[])
    }
    Add(Button,13105568,98,161)
    {
    Left=10
    Top=10
    Width=120
    Caption="Open"
    link(onClick,1006367:doExecute,[])
    }
    Add(Hub,3768074,721,259)
    {
    link(onEvent1,7536952:doSort,[(745,265)(745,230)])
    link(onEvent2,16085781:doCount,[])
    }
    Add(Charset,6746549,364,175)
    {
    Type=9
    link(onCharset,10965763:doEvent1,[])
    }
    Add(FileStream,10959428,266,175)
    {
    link(onLoad,14499661:doConvert,[])
    }
    Add(StreamConvertor,14499661,315,175)
    {
    Mode=6
    link(onResult,6746549:doCharset,[])
    }
    Add(MultiStrPart,5196492,217,182)
    {
    Char="."
    Count=1
    }
    Add(Hub,9822594,182,161)
    {
    OutCount=4
    link(onEvent1,9452010:doClear,[(866,167)(866,279)])
    link(onEvent2,7536952:doClear,[(737,174)(737,195)])
    link(onEvent3,10959428:doOpen,[])
    link(onEvent4,5196492:doSplit,[])
    }
    Add(BlockFind,14882931,441,182)
    {
    StartBlock="PlayerKilled"
    EndBlock="]"
    link(onSearch,14755937:doSplit,[])
    link(onEndSearch,3768074:doEvent1,[(484,195)(484,265)])
    }
    Add(Hub,10965763,406,175)
    {
    link(onEvent1,16070677:doText,[(434,181)(434,139)])
    link(onEvent2,14882931:doSearch,[])
    }
    карма: 1
    Не так страшна ошибка, как опасность её не заметить.

    1
    Голосовали:Pro_X7_Gaming
    Ответов: 7
    Рейтинг: 1
    #14: 2012-11-24 15:29:38 ЛС | профиль | цитата
    Попробовал предложенное nesco программа работает и выдает текстовый файл по завершению но он почему то оказывается пустым (

    Интересно почему?

    ser_davkin
    Запустилась программа но так и не смог заставить ее анализировать лог.

    Спасибо что помогаете мне а то сидеть и в ручную в поиске лазить по логу очень муторно и долго.
    карма: 0

    0
    Ответов: 16884
    Рейтинг: 1239
    #15: 2012-11-24 15:47:38 ЛС | профиль | цитата
    Pro_X7_Gaming писал(а):
    сидеть и в ручную в поиске лазить по логу очень муторно и долго
    Ну, блин, даешь !
    Пословица писал(а):
    Без труда не вытащишь и рыбку из пруда
    А вы (отвечающие) поупражняйтесь. Успехов Вам в Вашем труде.

    Как тонко намекал
    Леонид писал(а):
    скорее всего коллеге надо в другой раздел

    карма: 25
    Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
    0
    Сообщение
    ...
    Прикрепленные файлы
    (файлы не залиты)