Показать полную графическую версию : Создание месячного отчета
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, который и пишет логи.
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
@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) их нет в восьмеричной системе.
Помогите решить эту проблему.
подозреваю, что в следующий раз проблема возникнет в январе (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
vBulletin v3.6.4, Copyright ©2000-2025, Jelsoft Enterprises Ltd.