Войти

Показать полную графическую версию : [решено] Нужно допилить BAT - парсер лога


it_ptm
21-03-2017, 14:44
Суть вопроса вот в чем:

Была такая задача, сделать парсер лога АТС.
Прога WinTarrif 32 пишет лог звонков.
Нужно было сделать считывание лога, bat-ом, подмену коротких номеров на Фамилию.
Это сделано.
Еще не реализована подмена мобильного и городского номера(

Но вот в чем вопрос, батник каждый раз читает лог с начала.

а как добавить функцию:
При запуске bata в cmd вопрос введите дату формата: dd/mm/yy
Чтобы bat искал строки с нужными датами потом осуществлял подмену короткого номера на фио и только потом был виден результат - Андреев called Иванов
И еще не знаю как реализовать чтобы бат отслеживал изменения в логе, допустим прога дописала данные, и bat их вывел.
Каждый раз бат перезапускать ну оч тоскливо, да и реальный лог длинный, и оч долго его читает, из за этого возникла идея с вводом времени

Прикреплю в архиве то что получилось.

it_ptm
27-03-2017, 16:08
Совсем никто не может посоветовать как допилить?(

mwz
27-03-2017, 17:25
it_ptm, а АТС у вас не позволяет создать адресную книгу и отдавать затем не телефонные номера, а их описания, т.е. имена абонентов (в случае, разумеется, если такой номер в адресной книге есть — иначе отдаётся номер)? Некоторые АТС это позволяют.

Iska
27-03-2017, 18:21
Совсем никто не может посоветовать как допилить?( »
it_ptm, вопросов много возникает. Прежде всего в части, что до «допилить». Вот первые, но не последние:

Как, откуда и каким образом Вы получаете файл log.txt?
Почему Вы пытаетесь работать с неким логом, но не работаете напрямую с файлом базы данных CALLS.DBF посредством OLE DB?
Можно использовать для запрошенных целей встроенные средства построения отчётов WinTariff?
Что Вы планируете делать потом с этим файлом log.txt?

В любом случае, тот шестистрочный огрызок log.txt без толкования его полей — ни о чём.

it_ptm
28-03-2017, 15:57
mwz,
Если бы могла, зачем мне пирожки печ в cmd из bat?
Iska,
Отвечаю:
1 - лог txt формирует прога wintariff
2 - потому что основная задача стояла в просмотре лога, и замене коротких номеров на фамилии и вывод этого на экран или на нужную дату или на нужный номер по дате.
(для чего создается файл data руками).
Собственно почему: потому что неудобно лезть на сервак и открывать лог файл, потом смотреть по коротокому кто звонил и так каждый раз при надобности, неудобно подан лог - дата время номера. и еще причина Не знаю что такое OLE DB и как с ней работать, а если не знаешь добрый день cmd
3 построение отчетов, тоесть он мне будет в файл кидать результат, я его открывать должен...не в этом цель.
4. с лог txt ничего делать не планирую, он как писался ранее так и будет, пока АТС не накроется или сервер.

60% процентов задачи решено, подмену коротких номеров прикрутил, как сделать подмену городских и мобильных по такому же шаблону не пойму.
и плюс как сделать при запуске бата, возможность ввода даты. чтобы не ждать пока весь лог прочитает,
а ввел формат:
28/03/17 надавил ентер лог за сегоднешний день считался.
ввел 28/03/17 112 считался лог за указанную дату только для номера 112

В варианте ввода только даты было б неплохо, если б bat при выполнении проверял не пополнился ли log и продолжал выводить данные в реальном времени. без перезапуска.

Не уверен решаемо ли целями винды это.

Может ваш вариант с OLE DB был интересен, если б в реальном времени можно было б видеть звонки, а не только как логе, после звонка.

Пишите что думаете.

Возможно вариант с вводом строке реализовать командой поиска строки с текстом dd/mm/yy
P.S. Хреново когда понимаешь что нужно, но не знаешь как это выразить в коде

Iska
28-03-2017, 23:56
1 - лог txt формирует прога wintariff »
Спасибо, кэп. Повторяю вопрос, акцентируя на словах:
Как, откуда и каким образом Вы получаете файл log.txt? »

2 - потому что основная задача стояла в просмотре лога, и замене коротких номеров на фамилии и вывод этого на экран или на нужную дату или на нужный номер по дате. »
Это вторичная или даже третичная, а вовсе не основная задача. Основную Вы нам не озвучили.
3 построение отчетов, тоесть он мне будет в файл кидать результат, я его открывать должен...не в этом цель. »
Так расскажите, что Вам надо получить. Не «в логе менять номера на фамилии», а исходную, первичную задачу.

Может ваш вариант с OLE DB был интересен, если б в реальном времени можно было б видеть звонки, а не только как логе, после звонка. »
Простите, это зависит только от того, когда, в какой момент и с какой частотой производится опрос станций. И как я понимаю, запись даже в dbf-файле появится только после окончания разговора. Возможен ли параллельный доступ к базе dbf в то же время, когда с ней работает WinTariff? Полагаю, что нет, наверняка приложение открывает базу данных монопольно.

Повторю: для любого осмысленного ответа по работе с лог-файлом нужно не шесть его строчек, а несколько сотен или тысяч, плюс Вы должны описать структуру его полей (и не забывайте про первый вопрос).

it_ptm
30-03-2017, 14:00
Iska,
Вы запускали хоть то что приложено к посту?)))

Вот это да, нужно не шесть строчек, а сотен и тысяч...60 процентов задачи выполнено. нужно напильником подпилить.

Еще раз говорю, как работает WinTarrif32 с АТС, как она ее опрашивает для записи лога я не вкурсе. не я ее ставил и настраивал.
Результат работы вин тариф:
Постоянно дописывается инфа в текстовый файл (образец приложен)! В 1 и тот же файл постоянно!

Что я реализовал, реализовал чтение файла и подмену коротких номеров на фамилии.
Не сделано: подмена мобильных и гордских
не седално: вывод данных по дате и по дате и номеру вместе(мне видется лучше это сделать как только бат запустился, вопрос введите дату вводим дату или на вопрос введите дату вводим и дату и время, в жестко заданной форме). Т.к. читать длинный лог будет долго

Да и зачем Вам как и каким образом я его получаю, есть лог, есть жестко заданные форма вывода. Нужно смастерить парсер, извините домастерить, пол пути пройдено.
Когда начал работу над парсером, мне не интересно было как вин тариф его делает и каким образом, мне нужен парсер.

Не зря ж я архив кинул для наглядности.

Iska
30-03-2017, 15:08
it_ptm, спасибо, ясно. С подобным подходом — дальше продолжайте без меня.

it_ptm
30-03-2017, 16:36
it_ptm,
Сделаем проще. тема закрыта.
Попросил подсказать что в батнике допилить определенные моменты, как работает вин тариф я не знаю, и каким образом она пишет лог. есть файл на этом все.
Спасибо за внимание. если все такие обидчивые лучше тем и не открывать

Iska
30-03-2017, 17:22
it_ptm, это не обида, а констатация факта. Нет техзадачи, нет достаточной информации, нет у автора желания работать плодотворно и совместно — его проблемы. Жаль, что Вы так этого и не поняли, а полезли в бутылку.

it_ptm
03-04-2017, 17:09
Iska,
Все прошее некуда!
Описано все подробно, даже приложен рабочий вариант, не делабщий на 100 проц что хотелось бы!
А именно что делает приложенный вариант - читает лог, подменяет короткие номера на фамилии, и все.

Нужно еще реализовать подмены на городские формат их 88634223333 или 88632556677
И мобильные формата 89888888888

Основная задача была в этом, но ввиду долгого чтения логов сама обой напросилась еще задача,
Реализовать после запуска Бата запрос ввода даты и/или ввода и даты и номера
(в теории одной даты будет необходимо и достаточно, а если еще и ввод номер то это уже как доп +)

на этом все)) ну что тут не ясно)

1. Допилить бат на подмену городских и мобильных. формат указан.
2. реализовать выбор даты
аля - Введите дату / и номер формата dd/mm/yy и/или dd/mm/yy nomber
3 вроде все.

Работать должно по задумке так:
1 - Запускаем bat
Открывается консолька - первое что видим вопрос:
Введите дату или дату и номер формата dd/mm/yy и/или dd/mm/yy nomber
2. вводим дату давим энтер
3. бат читает лог, подменяет номера на фамилии и выводит в консольке в таком же виде в каком это сделано в примере в архиве)

Второй вариант развития событий:
1 - Запускаем bat
Открывается консолька - первое что видим вопрос:
Введите дату или дату и номер формата dd/mm/yy и/или dd/mm/yy nomber
2. вводим дату и номер давим энтер
3. бат читает лог, подменяет номера на фамилии и выводит в консольке инфу по звонкам за нужное дату на указанный номер
в таком же виде в каком это сделано в примере в архиве)

Я уже не знаю как описать))

1. Переписать код бата, так чтобы в начале был код Запроса на ввод даты или ввода номера и даты.
2. мы вводим дату или дату и номер
3. давим ентер
4. бат находит строки с датой, и в этих строках производит подмену коротких номеров на фамилии
5. выводит в консоли строки с датой и фамилиями (которые он подменил на короткие номера)

4.1 бат находит строки с указанной датой и номером, выполняет подмену номеров на фамилии
5.1 выводит в консили на экран

И было б супер если бы бат продолжал читаться в реальном времени в обоих вариантах

:dont-know Реально не знаю чего еще написать!

Вроде бы все понятно.




© OSzone.net 2001-2012