PDA

Показать полную графическую версию : Создание месячного отчета


Arsenik77
26-10-2012, 20:12
Помогите в решении такой задачи

Есть лог от АТС в приведенном ниже формате, нужно составить ежемесячный отчет т.е. из лога убрать все строчки прошлых месяцев.

10.06.1009:19:40 17 3003 00:00:368111111119 2 9 2
12.07.1009:21:09 17 3003 00:01:0789000000009 2 9 2
12.07.1009:24:12 1 3011 00:01:062111111 2 3

з.ы. Понимаю что есть тарификаторы, но со станцией возникли какие-то проблемы и работает только hyper terminal, который и пишет логи.

Iska
26-10-2012, 20:49
Arsenik77, как Вы определяете, что первая строчка — предыдущий месяц, а две последующие — текущий?

Arsenik77
26-10-2012, 21:42
Планировщиком ежемесячного 1-го числа копируется лог (почему 1-го потому-что в планировщике winXP нет понятия последние число месяца), чтоб упростить чтение лога надо убрать строки принадлежащие позапрошлым месяцам.

например: на сегодня - надо убрать августовские логи, т.е. оставить все сентябрьские строки и частично октябрьские (не критично)
31.08.1209:19:40 17 3003 00:00:368111111119 2 9 2
01.09.1209:21:09 17 3003 00:01:0789000000009 2 9 2
30.09.1209:21:09 17 3003 00:01:078945456009 2 9 2
01.10.1209:24:12 1 3011 00:01:062111111 2 3

еще один путь: удалять определенное количество первых строк в логе т.е. на 1-е число каждого месяца создается свой лог допустим ats01.08.12.log (он полный за все месяцы только на 01.08.12) выясняем сколько в нем строк и удаляем их из лога ats01.09.12.log (он полный за все месяцы только на 01.09.12) и получим лог за сентябрь месяц например LOGIATS01.09.12.log

Iska
26-10-2012, 23:15
@echo off
setlocal enableextensions enabledelayedexpansion

set /a iMonth = %date:~3,2% - 1
set sMonth=0%iMonth%

type "0001.log" | findstr.exe "^...%sMonth:~-2%.*$"

endlocal
exit /b 0

Arsenik77
27-10-2012, 07:02
Спасибо все работает

Arsenik77
07-08-2013, 13:38
Все работало до июля, потом батник стал выводить ошибку.
Выяснил что проблема в цифрах 8 и 9 (08 и 09) их нет в восьмеричной системе.
Помогите решить эту проблему.

amel27
07-08-2013, 14:08
подозреваю, что в следующий раз проблема возникнет в январе (1-й месяц)

еще один путь: удалять определенное количество первых строк в логе т.е. на 1-е число каждого месяца создается свой лог допустим ats01.08.12.log (он полный за все месяцы только на 01.08.12) выясняем сколько в нем строк и удаляем их из лога ats01.09.12.log (он полный за все месяцы только на 01.09.12) и получим лог за сентябрь месяц например LOGIATS01.09.12.log »может, подсчитать кол-во строк в старом файле и пропустить их при копировании?
for /f "tokens=*" %%n in ('find /c /v ""^<"ats01.08.12.log"') do set $n=%%n
(for /f "usebackq tokens=* skip=%$n%" %%a in ("ats01.09.12.log") do @echo/%%a
)>LOGIATS01.09.12.log

Arsenik77
07-08-2013, 14:59
шедулер запускает батник и нужно чтоб дата (месяц) автоматический вписывалась и создавался лог типа ats-08.13.log, такое выражение уже не подходит Цитата amel27:
"ats01.08.12.log" »
Повторяю, предыдущий способ отлично работал до июля и думаю будет работать в октябре, Лог большой ~40MB. На этот комп захожу крайне редко.




© OSzone.net 2001-2012