Ветеран
Сообщения: 27449
Благодарности: 8088
|
Профиль
|
Отправить PM
| Цитировать
TRaMeLL, пробуйте:
читать дальше »
Код: 
Option Explicit
Const adInteger = 3
Const adCurrency = 6
Const adDate = 7
Const adVarChar = 200
Dim lngErrCode
Dim strSourceFile
Dim strLine
Dim objTS
Dim objRecordSet
Dim intNumberMaxLength
Dim intSummMaxLength
Dim intPlatMaxLength
If WScript.Arguments.Count = 1 Then
strSourceFile = WScript.Arguments.Item(0)
With WScript.CreateObject("Scripting.FileSystemObject")
If .FileExists(strSourceFile) Then
Set objTS = .OpenTextFile(strSourceFile)
With WScript.CreateObject("ADOR.Recordset")
With .Fields
.Append "Дата", adDate
.Append "Номер", adVarChar, 2^5
.Append "Сумма", adCurrency
.Append "ДлинаСтрокиСумма", adInteger
.Append "Плательщик", adVarChar, 2^15 - 1
.Append "ДлинаСтрокиПлательщик", adInteger
End With
.Open
Do Until objTS.AtEndOfStream
strLine = objTS.ReadLine()
Select Case Split(strLine, "=")(0)
Case "СекцияДокумент"
.AddNew
Case "Дата"
If Len(Split(strLine, "=")(1)) <> 0 Then
.Fields.Item("Дата").Value = CDate(Split(strLine, "=")(1))
End If
Case "Номер"
.Fields.Item("Номер").Value = CStr(Split(strLine, "=")(1))
Case "Сумма"
'SetLocale "en-us"
.Fields.Item("Сумма").Value = CCur(Split(strLine, "=")(1))
'SetLocale "ru"
.Fields.Item("ДлинаСтрокиСумма").Value = Len(FormatCurrency(.Fields.Item("Сумма").Value, 2))
Case "Плательщик", "Плательщик1"
.Fields.Item("Плательщик").Value = CStr(Split(strLine, "=")(1))
.Fields.Item("ДлинаСтрокиПлательщик").Value = Len(CStr(Split(strLine, "=")(1)))
Case "ДатаСписано"
If IsDate(Split(strLine, "=")(1)) Then
.Fields.Item("Сумма").Value = - .Fields.Item("Сумма").Value
End If
End Select
Loop
objTS.Close
.Sort = "Номер DESC" : .MoveFirst
intNumberMaxLength = Len(.Fields.Item("Номер").Value)
.Sort = "ДлинаСтрокиСумма DESC" : .MoveFirst
intSummMaxLength = .Fields.Item("ДлинаСтрокиСумма").Value
.Sort = "ДлинаСтрокиПлательщик DESC" : .MoveFirst
intPlatMaxLength = .Fields.Item("ДлинаСтрокиПлательщик").Value
.Sort = "" : .MoveFirst
Do Until .EOF
With .Fields
WScript.StdOut.Write Left(CStr(.Item("Дата").Value) & Space(10), 10) & vbTab
WScript.StdOut.Write Right(Space(intNumberMaxLength) & CStr(.Item("Номер").Value), intNumberMaxLength) & vbTab
WScript.StdOut.Write Right(Space(intSummMaxLength) & FormatCurrency(.Item("Сумма").Value, 2), intSummMaxLength) & vbTab
WScript.StdOut.Write Left(CStr(.Item("Плательщик").Value) & Space(intPlatMaxLength), intPlatMaxLength)
WScript.StdOut.WriteLine
End With
.MoveNext
Loop
.Close
End With
Set objTS = Nothing
lngErrCode = 0
Else
WScript.StdErr.WriteLine "File [" & strSourceFile & "] not found"
lngErrCode = 2
End If
End With
Else
WScript.StdErr.WriteLine "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ ""<Source file>"""
lngErrCode = 1
End If
WScript.Quit lngErrCode
Замечание:
Цитата Iska:
Если опять формат десятичных разделителей в файле и на машине не совпадает — раскомментируйте SetLocale'ы. »
|
остаётся в силе.
Если возникнут ошибки с определением дебет/кредит — пишите. Сейчас просто полагаемся на то, что поле Сумма находится в секции ранее поля ДатаСписано. Если может быть обратное, то придётся усложнять разбор.
|
Отправлено: 18:57, 08-10-2012
| #29
|