Сообщение Alf » 08.07.2008 11:29
скрипт подготовки лога для импорта в sql
Set oShell = CreateObject("Shell.Application")
Set WshShell = WScript.CreateObject("WScript.Shell")
Set WSHNetwork = WScript.CreateObject("WScript.Network")
Set colDrives = WSHNetwork.EnumNetworkDrives
Set fso=WScript.CreateObject("Scripting.FileSystemObject")
set wshProcEnv = wshShell.environment("process")
Const PathBillingLog="U:\LogFiles\"
Const NameBillingFile="ATS_YYYYMMDD.log"
Const PathBillingLogForSQLImport="U:\"
Const NameBillingFileForSQLImport="ATS_Billing.log"
Const Delimer="|"
Dim DateCurrentLog
Dim DateCurrentLogFile
Dim StrCallNumberReturn
'Процедура должна стартануть в 23:59
Call GetDateCurrentLogFile
'Ожидание 2 минуты отключения службы от текущего лога
Call TimeOut
'Чтение завершонного лога в 00:01 прошлого дня
Call ReadLogFile
'===========================================================================
Sub GetDateCurrentLogFile()
DateCurrentLog= mid(date,7,4) & Mid(date,4,2) & mid(date,1,2)
DateCurrentLogFile= PathBillingLog & Replace(NameBillingFile, "YYYYMMDD", DateCurrentLog)
End Sub
Sub ReadLogFile
Set LogFile = FSO.OpenTextFile(DateCurrentLogFile, 1, False)
Set BillingForSQLFile=FSO.OpenTextFile(PathBillingLogForSQLImport & NameBillingFileForSQLImport, 2, True)
StrWrite=""
Do While Not LogFile.AtEndOfStream
Str_Billing = LogFile.ReadLine
StrWrite = Mid(Str_Billing,1,6) & mid(date,7,2) & Mid(Str_Billing,7,2)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,9,8)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,18,2)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,23,3)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,31,8)
StrCallNumber=Mid(Str_Billing,39,20)
StrCallNumberReturn=""
Call CheskCallNumber(Str_Billing,StrCallNumber)
StrCallNumber=StrCallNumberReturn
StrWrite = StrWrite & Delimer & StrCallNumberReturn
StrWrite = StrWrite & Delimer & Mid(Str_Billing,75,2)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,103,1)
StrWrite = StrWrite & Delimer & Mid(Str_Billing,105,1)
'попытка отрезать недонабранные номера менее 5 цифр
If Len(Trim(StrCallNumber))=>5 then
BillingForSQLFile.WriteLine(StrWrite)
End if
Loop
LogFile.Close
BillingForSQLFile.Close
End Sub
'================================================================
Sub CheskCallNumber(StrBilling,CallNumber)
CallNumber=Trim(CallNumber)
' korp
If Mid(StrBilling,103,1)="0" Then
If Mid(CallNumber,1,1)="0" And Mid(CallNumber,2,1)<>"0" Then CallNumber="0" & CallNumber
If Mid(CallNumber,1,2)="00" Then CallNumber=CallNumber
If Mid(CallNumber,1,1)<>"0" Then CallNumber= "00" & CallNumber
End If
' gorod
If Mid(StrBilling,103,1)="9" Then
CallNumber=CallNumber
End If
StrCallNumberReturn=CallNumber & String(20-Len(Trim(CallNumber))," ")
End Sub
'================================================================
Sub TimeOut
WScript.Sleep 120000
End Sub