Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Скриптовые языки администрирования Windows (http://forum.oszone.net/forumdisplay.php?f=102)
-   -   [решено] Экспорт данных из одного txt файла в другой (http://forum.oszone.net/showthread.php?t=241020)

TRaMeLL 21-08-2012 10:17 1973822

Экспорт данных из одного txt файла в другой
 
Добрый день!
Нужна помощь: есть файл Kl_to_1c.txt примерно такого содержания:
читать дальше »
1CClientBankExchange
ВерсияФормата=1,01
Кодировка=Windows
Получатель=1Cv77
ДатаСоздания=21.08.2012
ВремяСоздания=15:03:30
ДатаНачала=20.08.2012
ДатаКонца=21.08.2012
РасчСчет=77777777777777777777
СекцияДокумент=Платежное поручение
Дата=20.08.2012
Номер=1339
Сумма=146
ПлательщикСчет=12345678901234567890
ПолучательСчет=09876543210987654321
ПлательщикИНН=1234567890
Плательщик1=Филиал ОАО "Иркутскэнерго"
ПлательщикБИК=042520607
ПлательщикБанк1=БАЙКАЛЬСКИЙ БАНК СБЕРБАНКА РОССИИ Г.ИРКУТСК
ПолучательИНН=0987654321
Получатель1=ИП Иванов Иван Иванович
ПолучательБИК=042520607
ПолучательБанк1=БАЙКАЛЬСКИЙ БАНК СБЕРБАНКА РОССИИ Г.ИРКУТСК
НазначениеПлатежа=Оплата счета №10 от 20.08.2012г. Без налога (НДС)
СтатусСоставителя=
ПлательщикКПП=222222222
ПолучательКПП=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
ВидОплаты=1
ДатаПоступило=20.08.2012
КонецДокумента

Необходимо получить файл с таким содержимым:
читать дальше »
20.08.2012 - 1339 - 146 - Филиал ОАО "Иркутскэнерго"

Т. е. формат типа: %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
Спасайте. :)

Iska 21-08-2012 17:33 1974082

Например, так:
читать дальше »
Код:

Option Explicit

Dim lngErrCode

Dim strSourceFile
Dim strLine
Dim strResult


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FileExists(strSourceFile) Then
                        With .OpenTextFile(strSourceFile)
                                strResult = ""
                               
                                Do Until .AtEndOfStream
                                        strLine = .ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                Case "Дата", "Номер", "Сумма", "Плательщик1"
                                                        strResult = strResult & Split(strLine, "=")(1) & " - "
                                        End Select
                                Loop
                               
                                strResult = Left(strResult, Len(strResult) - Len(" - "))
                               
                                .Close
                        End With
                       
                        WScript.StdOut.WriteLine strResult
                        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


Исполнять под «cscript.exe», указывая исходный файл аргументом скрипта, а результирующий — перенаправлением вывода, наподобие:
Код:

cscript.exe //nologo "C:\Песочница\0018\MyScript.vbs" "C:\Temp\Kl_to_1c.txt" 1>Out.txt 2>Errors.txt

TRaMeLL 21-08-2012 19:58 1974170

Великолепно! Почти. Только нужно еще сделать так чтобы после:
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
Начиналась новая строка, сейчас идет сразу: %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% - %Дата=% - %Номер=% - %Сумма=% - %Плательщик1=% и т. д.
А надо:
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
%Дата=% - %Номер=% - %Сумма=% - %Плательщик1=%
....
и т. д. до конца

Iska 22-08-2012 03:30 1974404

В реальном файле «Kl_to_1c.txt» несколько квитанций о платежах? В Вашем примере только одна квитанция, а я просто не успел взять реальный файл у себя, а так бы проверил на реальных данных.

Попробуйте тогда так:
читать дальше »
Код:

Option Explicit

Dim lngErrCode

Dim strSourceFile
Dim strLine
Dim strResult


If WScript.Arguments.Count = 1 Then
        strSourceFile = WScript.Arguments.Item(0)
       
        With WScript.CreateObject("Scripting.FileSystemObject")
                If .FileExists(strSourceFile) Then
                        With .OpenTextFile(strSourceFile)
                                strResult = ""
                               
                                Do Until .AtEndOfStream
                                        strLine = .ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                Case "Дата", "Номер", "Сумма"
                                                        strResult = strResult & Split(strLine, "=")(1) & " - "
                                                Case "Плательщик1"
                                                        strResult = strResult & Split(strLine, "=")(1) & vbCrLf
                                        End Select
                                Loop
                               
                                .Close
                        End With
                       
                        WScript.StdOut.Write strResult
                        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


TRaMeLL 22-08-2012 05:00 1974417

Да, в реальном файле могут быть несколько квитанций. Теперь всё OK. Спасибо огромное!

TRaMeLL 22-08-2012 05:58 1974425

В принципе и так нормально, но кое-что еще можно поправить:
Сейчас, если %Номер% одинаковое количество символов, то всё нормально, но если число разное, т. е. в одной строке, например 5 символов, а во второй - 3, то файл получается немного кривым. Можно как-то облагородить форматирование? Чтобы получались ровные колонки? Вот тогда счастью моему не было бы предела. :)

Iska 22-08-2012 06:53 1974433

TRaMeLL, Вам нужен табличный, выровненный вид? Зачем тогда нужны разделители « - » в результирующем файле?

TRaMeLL 22-08-2012 07:20 1974438

Да, нужен табличный вид. " - " это просто для примера, я вместо него vbTab поставил.

Iska 22-08-2012 08:39 1974456

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 "Номер",                  adInteger
                                        .Append "Сумма",                  adCurrency
                                        .Append "Плательщик1",            adVarChar, 2^15 - 1
                                        .Append "ДлинаСтрокиПлательщик1", adInteger
                                End With
                               
                                .Open
                               
                                Do Until objTS.AtEndOfStream
                                        strLine = objTS.ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                Case "Дата"
                                                        .AddNew
                                                        .Fields.Item("Дата").Value = CDate(Split(strLine, "=")(1))
                                                Case "Номер"
                                                        .Fields.Item("Номер").Value = CLng(Split(strLine, "=")(1))
                                                Case "Сумма"
                                                        .Fields.Item("Сумма").Value = CCur(Split(strLine, "=")(1))
                                                Case "Плательщик1"
                                                        .Fields.Item("Плательщик1").Value = CStr(Split(strLine, "=")(1))
                                                        .Fields.Item("ДлинаСтрокиПлательщик1").Value = Len(CStr(Split(strLine, "=")(1)))
                                        End Select
                                Loop
                               
                                objTS.Close
                               
                                .Sort = "Номер DESC" : .MoveFirst
                                intNumberMaxLength = Len(CStr(.Fields.Item("Номер").Value))
                               
                                .Sort = "Сумма DESC" : .MoveFirst
                                intSummMaxLength  = Len(CStr(.Fields.Item("Сумма").Value))
                               
                                .Sort = "ДлинаСтрокиПлательщик1 DESC" : .MoveFirst
                                intPlatMaxLength  = .Fields.Item("ДлинаСтрокиПлательщик1").Value
                               
                                .Sort = "" : .MoveFirst
                               
                                Do Until .EOF
                                        With .Fields
                                                WScript.StdOut.Write FormatString(.Item("Дата").Value, 10) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Номер").Value, intNumberMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Сумма").Value, intSummMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Плательщик1").Value, 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
'=============================================================================

'=============================================================================
Function FormatString(anyValue, intLength)
        Select Case TypeName(anyValue)
                Case "Date"
                        FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "String"
                        FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "Integer", "Long", "Currency"
                        FormatString = Right(Space(intLength) & CStr(anyValue), intLength)
                Case Else
                        FormatString = "<unsupported type " & TypeName(anyValue) & ">"
        End Select
End Function
'=============================================================================


На копейки не рассчитано. Если могут присутствовать — надо будет править код.

TRaMeLL 22-08-2012 08:51 1974458

Этот что-то не запустился, в логе ссылается на 51-ю строку. И там копейки присутствуют еще.

Iska 22-08-2012 11:17 1974536

Доберусь до реального файла — посмотрю. И, коль есть копейки — надо будет перестроить логику выравнивания Currency под десятичный разделитель. В Вашем файле, он, кстати, какой? Точка или запятая?

TRaMeLL 22-08-2012 11:35 1974552

В моем файле - точка.

Iska 23-08-2012 10:43 1975250

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 "Номер",                  adInteger
                                        .Append "Сумма",                  adCurrency
                                        .Append "ДлинаСтрокиСумма",      adInteger
                                        .Append "Плательщик1",            adVarChar, 2^15 - 1
                                        .Append "ДлинаСтрокиПлательщик1", adInteger
                                End With
                               
                                .Open
                               
                                Do Until objTS.AtEndOfStream
                                        strLine = objTS.ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                Case "Дата"
                                                .AddNew
                                                .Fields.Item("Дата").Value = CDate(Split(strLine, "=")(1))
                                                Case "Номер"
                                                .Fields.Item("Номер").Value = CLng(Split(strLine, "=")(1))
                                                Case "Сумма"
                                                .Fields.Item("Сумма").Value = CCur(Split(strLine, "=")(1))
                                                .Fields.Item("ДлинаСтрокиСумма").Value = Len(FormatCurrency(CCur(Split(strLine, "=")(1)), 2))
                                                Case "Плательщик1"
                                                .Fields.Item("Плательщик1").Value = CStr(Split(strLine, "=")(1))
                                                .Fields.Item("ДлинаСтрокиПлательщик1").Value = Len(CStr(Split(strLine, "=")(1)))
                                        End Select
                                Loop
                               
                                objTS.Close
                               
                                .Sort = "Номер DESC" : .MoveFirst
                                intNumberMaxLength = Len(CStr(.Fields.Item("Номер").Value))
                               
                                .Sort = "ДлинаСтрокиСумма DESC" : .MoveFirst
                                intSummMaxLength  = .Fields.Item("ДлинаСтрокиСумма").Value
                               
                                .Sort = "ДлинаСтрокиПлательщик1 DESC" : .MoveFirst
                                intPlatMaxLength  = .Fields.Item("ДлинаСтрокиПлательщик1").Value
                               
                                .Sort = "" : .MoveFirst
                               
                                Do Until .EOF
                                        With .Fields
                                                WScript.StdOut.Write FormatString(.Item("Дата").Value, 10) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Номер").Value, intNumberMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Сумма").Value, intSummMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Плательщик1").Value, 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
'=============================================================================

'=============================================================================
Function FormatString(anyValue, intLength)
        Select Case TypeName(anyValue)
                Case "Date"
                FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "String"
                FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "Integer", "Long"
                FormatString = Right(Space(intLength) & CStr(anyValue), intLength)
                Case "Currency"
                FormatString = Right(Space(intLength) & FormatCurrency(anyValue, 2), intLength)
                Case Else
                FormatString = "<unsupported type " & TypeName(anyValue) & ">"
        End Select
End Function
'=============================================================================


TRaMeLL 23-08-2012 11:07 1975260

Неа, всё-равно не хочет выполняться, пишет:
"convert.vbs(52, 7) Ошибка выполнения Microsoft vbscript: Несоответствие типа: 'CCur'"
Вот мой файл - http://narod.ru/disk/59839075001.397...to_1c.zip.html

Iska 23-08-2012 11:53 1975300

Хмм. У меня на Вашем файле отработало нормально. Результат исполнения отправил в личку.

Подозреваю, что дело может быть в региональных настройках. Выложите сюда файл «International.reg» — результат исполнения команды:
Код:

reg.exe export "HKEY_CURRENT_USER\Control Panel\International" "International.reg"
попробую смоделировать у себя.

TRaMeLL 23-08-2012 12:49 1975366

Попробовал на Windows XP (RU) и на Windows 2000 SP4 (EN), тоже не запустился.
Вот ветка реестра от XP:
читать дальше »
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\International]
"iCountry"="7"
"iCurrDigits"="2"
"iCurrency"="1"
"iDate"="1"
"iDigits"="2"
"iLZero"="1"
"iMeasure"="0"
"iNegCurr"="5"
"iTime"="1"
"iTLZero"="1"
"Locale"="00000419"
"s1159"=""
"s2359"=""
"sCountry"="Россия"
"sCurrency"="р."
"sDate"="."
"sDecimal"=","
"sLanguage"="RUS"
"sList"=";"
"sLongDate"="d MMMM yyyy 'г.'"
"sShortDate"="dd.MM.yyyy"
"sThousand"="*"
"sTime"=":"
"sTimeFormat"="HH:mm:ss"
"iTimePrefix"="1"
"sMonDecimalSep"=","
"sMonThousandSep"="*"
"iNegNumber"="1"
"sNativeDigits"="0123456789"
"NumShape"="1"
"iCalendarType"="1"
"iFirstDayOfWeek"="0"
"iFirstWeekOfYear"="0"
"sGrouping"="3;0"
"sMonGrouping"="3;0"
"sPositiveSign"=""
"sNegativeSign"="-"

[HKEY_CURRENT_USER\Control Panel\International\Calendars]

[HKEY_CURRENT_USER\Control Panel\International\Calendars\TwoDigitYearMax]
"1"="2098"
"2"="2098"
"9"="2098"
"10"="2098"
"11"="2098"
"12"="2098"

[HKEY_CURRENT_USER\Control Panel\International\Geo]
"Nation"="203"

А это от 7 x64:
читать дальше »
Windows Registry Editor Version 5.00

[HKEY_CURRENT_USER\Control Panel\International]
"Locale"="00000419"
"LocaleName"="ru-RU"
"s1159"=""
"s2359"=""
"sCountry"="Russia"
"sCurrency"="р."
"sDate"="."
"sDecimal"=","
"sGrouping"="3;0"
"sLanguage"="RUS"
"sList"=";"
"sLongDate"="d MMMM yyyy 'г.'"
"sMonDecimalSep"=","
"sMonGrouping"="3;0"
"sMonThousandSep"="*"
"sNativeDigits"="0123456789"
"sNegativeSign"="-"
"sPositiveSign"=""
"sShortDate"="dd.MM.yyyy"
"sThousand"="*"
"sTime"=":"
"sTimeFormat"="H:mm:ss"
"sShortTime"="H:mm"
"sYearMonth"="MMMM yyyy"
"iCalendarType"="1"
"iCountry"="7"
"iCurrDigits"="2"
"iCurrency"="1"
"iDate"="1"
"iDigits"="2"
"NumShape"="1"
"iFirstDayOfWeek"="0"
"iFirstWeekOfYear"="0"
"iLZero"="1"
"iMeasure"="0"
"iNegCurr"="5"
"iNegNumber"="1"
"iPaperSize"="9"
"iTime"="1"
"iTimePrefix"="0"
"iTLZero"="0"

[HKEY_CURRENT_USER\Control Panel\International\Geo]
"Nation"="203"

Iska 23-08-2012 16:08 1975492

Дьявол кроется в деталях.
Код:

"sDecimal"=","
VBScript не может воспринять текст с точкой как Currency, поскольку у Вас десятичным разделителем служит запятая. Я у себя давно всё перевёл с запятой на точку.

Давайте попробуем сказать принудительно, что у Вас временно иная локаль:
читать дальше »
Код:

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 "Номер",                  adInteger
                                        .Append "Сумма",                  adCurrency
                                        .Append "ДлинаСтрокиСумма",      adInteger
                                        .Append "Плательщик1",            adVarChar, 2^15 - 1
                                        .Append "ДлинаСтрокиПлательщик1", adInteger
                                End With
                               
                                .Open
                               
                                Do Until objTS.AtEndOfStream
                                        strLine = objTS.ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                Case "Дата"
                                                        .AddNew
                                                        .Fields.Item("Дата").Value = CDate(Split(strLine, "=")(1))
                                                Case "Номер"
                                                        .Fields.Item("Номер").Value = CLng(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("Плательщик1").Value = CStr(Split(strLine, "=")(1))
                                                        .Fields.Item("ДлинаСтрокиПлательщик1").Value = Len(CStr(Split(strLine, "=")(1)))
                                        End Select
                                Loop
                               
                                objTS.Close
                               
                                .Sort = "Номер DESC" : .MoveFirst
                                intNumberMaxLength = Len(CStr(.Fields.Item("Номер").Value))
                               
                                .Sort = "ДлинаСтрокиСумма DESC" : .MoveFirst
                                intSummMaxLength  = .Fields.Item("ДлинаСтрокиСумма").Value
                               
                                .Sort = "ДлинаСтрокиПлательщик1 DESC" : .MoveFirst
                                intPlatMaxLength  = .Fields.Item("ДлинаСтрокиПлательщик1").Value
                               
                                .Sort = "" : .MoveFirst
                               
                                Do Until .EOF
                                        With .Fields
                                                WScript.StdOut.Write FormatString(.Item("Дата").Value, 10) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Номер").Value, intNumberMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Сумма").Value, intSummMaxLength) & vbTab
                                                WScript.StdOut.Write FormatString(.Item("Плательщик1").Value, 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
'=============================================================================

'=============================================================================
Function FormatString(anyValue, intLength)
        Select Case TypeName(anyValue)
                Case "Date"
                FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "String"
                FormatString = Left(CStr(anyValue) & Space(intLength), intLength)
                Case "Integer", "Long"
                FormatString = Right(Space(intLength) & CStr(anyValue), intLength)
                Case "Currency"
                FormatString = Right(Space(intLength) & FormatCurrency(anyValue, 2), intLength)
                Case Else
                FormatString = "<unsupported type " & TypeName(anyValue) & ">"
        End Select
End Function
'=============================================================================



А отчего такой странный разделитель:
Код:

"sThousand"="*"

TRaMeLL 23-08-2012 17:22 1975556

Вот теперь идеально. Не знаю: что бы я без Вас делал, спасибо огроменное! :)
А в настройках я ничего не менял, даже не знаю почему такой разделитель.

Iska 24-08-2012 00:53 1975882

Цитата:

Цитата TRaMeLL
Вот теперь идеально. »

Ну, вот и славненько.

Цитата:

Цитата TRaMeLL
Не знаю: что бы я без Вас делал, »

Да то же самое делали б, разве что сами.

TRaMeLL 26-09-2012 07:59 1994885

Я снова за помощью. В реальных условиях, после перехода на новую систему файл Kl_to_1c.txt оказался другим и скрипт на нем не срабатывает.
Iska, написал вам PM, надеюсь на вашу помощь.

Iska 26-09-2012 12:13 1995031

TRaMeLL, в новом файле отсутствуют записи вида:
Цитата:

Цитата TRaMeLL
Код:

Дата=…
»

Так что, начните с формулировки новых требований: что, как, откуда…

TRaMeLL 26-09-2012 12:46 1995050

Почему отсутствуют? Там просто вначале документа не нужная информация, потом идет так (кусок из того же файла):
читать дальше »
СекцияДокумент=Платежное поручение
Номер=289
Дата=03.09.2012
Сумма=19580
ПлательщикСчет=40702810123456789012
ДатаСписано=
Плательщик=ООО "Рога и Копыта" (СБ РФ N 2413 БРАТСКОЕ Г.БРАТСК)
ПлательщикИНН=1234567890
ПлательщикКПП=1238745
ПлательщикРасчСчет=40702810418090007406
ПлательщикБанк1=БАЙКАЛЬСКИЙ БАНК СБЕРБАНКА РОССИИ
ПлательщикБИК=042520607
ПлательщикКорсчет=30101810900000000607
ПолучательСчет=40802810000000000000
ДатаПоступило=03.09.2012
Получатель=ИП ИВАНОВ ПЕТР СИДОРОВИЧ
ПолучательИНН=123456789012
ПолучательКПП=
ПолучательРасчСчет=40802810000000000000
ПолучательБанк1=БАЙКАЛЬСКИЙ БАНК СБЕРБАНКА РОССИИ
ПолучательБИК=042520607
ПолучательКорсчет=30101810900000000607
ВидПлатежа=
ВидОплаты=01
СтатусСоставителя=
ПоказательКБК=
ОКАТО=
ПоказательОснования=
ПоказательПериода=
ПоказательНомера=
ПоказательДаты=
ПоказательТипа=
Очередность=6
НазначениеПлатежа=За материалы согл. счёта № КМ-206 от 22.08.2012г. Cумма 19580-00, |без налога (НДС).|
КонецДокумента

Результат должен быть, так же, вида: %Дата=% %Номер=% %Сумма=% %Плательщик=% %НазначениеПлатежа=%

Iska 26-09-2012 14:08 1995101

Пробуйте:
читать дальше »
Код:

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)))
                                        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


Если опять формат десятичных разделителей в файле и на машине не совпадает — раскомментируйте SetLocale'ы.

TRaMeLL 26-09-2012 14:21 1995108

Ага, десятичные опять не совпадают, раскоменнтировал строки. Работает как надо. Спасибо огромное, вы мне снова жизнь спасли. :)

Iska 26-09-2012 14:32 1995115

Цитата:

Цитата TRaMeLL
Спасибо огромное, »

Рад был помочь.

Цитата:

Цитата TRaMeLL
вы мне снова жизнь спасли. »

Да, нет, это вряд ли ;).

TRaMeLL 02-10-2012 14:51 1998373

Обнаружилась очередная проблема. В новом формате исходного файла в параметре %Сумма=% не указан "-". Сразу этого не заметил. Поэтому в результирующем файле все суммы пишутся как кредит. Дебет теперь можно определить по наличию данных в параметре %ДатаСписано=% исходного файла (если дата присутствует, то операция - дебет, если дата отсутствует, то операция - кредит).
Теперь необходимо поправить скрипт таким образом, чтобы суммы на дебетовых операциях в результирующем файле были помечены знаком "-".

Iska 02-10-2012 19:20 1998486

Цитата:

Цитата TRaMeLL
В новом формате исходного файла… »

Где пример файла?

TRaMeLL 03-10-2012 05:17 1998750

Отправил в PM.

Iska 08-10-2012 18:57 2001538

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'ы. »

остаётся в силе.

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

TRaMeLL 09-10-2012 13:40 2002013

Спасибо! С определением, похоже, проблем нет. Немного переделал скрипт, конечный вид:
читать дальше »
Код:

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
Dim intNazPlatMaxLength

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 "ДатаПоступило",                adDate
                                        .Append "Номер",                        adVarChar, 2^5
                                        .Append "Сумма",                        adCurrency
                                        .Append "ДлинаСтрокиСумма",            adInteger
                                        .Append "Плательщик",                  adVarChar, 2^15 - 1
                                        .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))
                                                        .Fields.Item("Сумма").Value = - .Fields.Item("Сумма").Value
                                                        End If                                       
                                                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"
                                                        SetLocale "en-us"
                                                        .Fields.Item("Сумма").Value = CCur(Split(strLine, "=")(1))                                                       
                                                        'SetLocale "ru"
                                                        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 "НазначениеПлатежа"
                                                        .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 = "ДлинаСтрокиНазначениеПлатежа DESC" : .MoveFirst
                                intNazPlatMaxLength  = .Fields.Item("ДлинаСтрокиНазначениеПлатежа").Value
                               
                                .Sort = "" : .MoveFirst
                               
                                Do Until .EOF
                                        With .Fields
                                                WScript.StdOut.Write Left(CStr(.Item("ДатаСписано").Value) & Space(10), 10) & vbTab                               
                                                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) & vbTab
                                                WScript.StdOut.Write Left(CStr(.Item("НазначениеПлатежа").Value) & Space(intNazPlatMaxLength), intNazPlatMaxLength)
                                                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


Так ДатаСписано и ДатаПоступило - это 2 колонки, не знаю, стоит ли делать в одну или оставить так...

Iska 16-10-2012 05:25 2006232

Цитата:

Цитата 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
Dim intNazPlatMaxLength


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
                                        .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 "ДатаПоступило"
                                                        If IsEmpty(.Fields.Item("Дата").Value) Then
                                                                If Len(Split(strLine, "=")(1)) <> 0 Then
                                                                        .Fields.Item("Дата").Value = CDate(Split(strLine, "=")(1))
                                                                End If
                                                        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 "НазначениеПлатежа"
                                                        .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 = "ДлинаСтрокиНазначениеПлатежа DESC" : .MoveFirst
                                intNazPlatMaxLength  = .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) & vbTab
                                                WScript.StdOut.Write Left(CStr(.Item("НазначениеПлатежа").Value) & Space(intNazPlatMaxLength), intNazPlatMaxLength)
                                                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


TRaMeLL 17-10-2012 11:33 2007015

Iska, спасибо вам в очередной раз. Скрипт работает. С операциями на этом можно закончить. На основе этого же скрипта сделал еще одну обработку того же файла. Теперь в результирующий файл пишутся общие суммы по датам. В, общем-то, работает как надо, единственный момент, который я хотел бы прояснить в следующем:
В исходном файле последовательность данных такая:
читать дальше »
ДатаНачала=xx.xx.xxxx
ДатаКонца=xx.xx.xxxx
СекцияРасчСчет
ДатаНачала=xx.xx.xxxx
ДатаКонца=xx.xx.xxxx
...
СекцияРасчСчет
ДатаНачала=xx.xx.xxxx
ДатаКонца=xx.xx.xxxx
...
и т. д.

Сейчас скрипт пишет первую строку в результирующий файл из данных начиная с самого начала исходного файла, правильнее было бы сделать, чтобы он писал их начиная с секции "СекцияРасчСчет" (т. е. пропускал данные до этой секции), но я сам пока-что не понял что нужно исправить в скрипте. Сейчас его вид:
читать дальше »
Код:

Option Explicit

Const adInteger  =  3
Const adCurrency =  6
Const adDate    =  7



Dim lngErrCode

Dim strSourceFile
Dim strLine

Dim objTS
Dim objRecordSet

Dim intBeginSummMaxLen
Dim intDebitMaxLen
Dim intCreditMaxLen
Dim intEndSummMaxLen

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 "ДатаКонца",                  adDate
                                        .Append "НачальныйОстаток",            adCurrency
                                        .Append "ВсегоСписано",                adCurrency               
                                        .Append "ВсегоПоступило",              adCurrency                       
                                        .Append "КонечныйОстаток",            adCurrency                       
                                        .Append "ДлинаСтрокиНачальныйОстаток", adInteger
                                        .Append "ДлинаСтрокиВсегоСписано",    adInteger
                                        .Append "ДлинаСтрокиВсегоПоступило",  adInteger
                                        .Append "ДлинаСтрокиКонечныйОстаток",  adInteger                                       
                                End With
                               
                                .Open
                               
                                Do Until objTS.AtEndOfStream
                                        strLine = objTS.ReadLine()
                                       
                                        Select Case Split(strLine, "=")(0)
                                                'Case "СекцияРасчСчет"
                                                '        .AddNew
                                                Case "ДатаНачала"
                                                        .AddNew
                                                        .Fields.Item("ДатаНачала").Value = CDate(Split(strLine, "=")(1))
                                                Case "ДатаКонца"
                                                        .Fields.Item("ДатаКонца").Value = CDate(Split(strLine, "=")(1))
                                                Case "НачальныйОстаток"
                                                        'SetLocale "en-us"
                                                        SetLocale "en-us"
                                                        .Fields.Item("НачальныйОстаток").Value = CCur(Split(strLine, "=")(1))                                                       
                                                        .Fields.Item("ДлинаСтрокиНачальныйОстаток").Value = Len(FormatCurrency(.Fields.Item("НачальныйОстаток").Value, 4))
                                                Case "ВсегоСписано"
                                                        .Fields.Item("ВсегоСписано").Value = - CCur(Split(strLine, "=")(1))                                                       
                                                        .Fields.Item("ДлинаСтрокиВсегоСписано").Value = Len(FormatCurrency(.Fields.Item("ВсегоСписано").Value, 4))
                                                Case "ВсегоПоступило"
                                                        .Fields.Item("ВсегоПоступило").Value = CCur(Split(strLine, "=")(1))
                                                        .Fields.Item("ДлинаСтрокиВсегоПоступило").Value = Len(FormatCurrency(.Fields.Item("ВсегоПоступило").Value, 4))                                               
                                                Case "КонечныйОстаток"
                                                        .Fields.Item("КонечныйОстаток").Value = CCur(Split(strLine, "=")(1))                                                       
                                                        'SetLocale "ru"
                                                        SetLocale "ru"
                                                        .Fields.Item("ДлинаСтрокиКонечныйОстаток").Value = Len(FormatCurrency(.Fields.Item("КонечныйОстаток").Value, 4))                                                       
                                        End Select
                                Loop
                               
                                objTS.Close
                               
                                .Sort = "ДлинаСтрокиНачальныйОстаток DESC" : .MoveFirst
                                intBeginSummMaxLen  = .Fields.Item("ДлинаСтрокиНачальныйОстаток").Value
                               
                                .Sort = "ДлинаСтрокиВсегоСписано DESC" : .MoveFirst
                                intDebitMaxLen  = .Fields.Item("ДлинаСтрокиВсегоСписано").Value                               
                               
                                .Sort = "ДлинаСтрокиВсегоПоступило DESC" : .MoveFirst
                                intCreditMaxLen  = .Fields.Item("ДлинаСтрокиВсегоПоступило").Value                               
                               
                                .Sort = "ДлинаСтрокиКонечныйОстаток DESC" : .MoveFirst
                                intEndSummMaxLen  = .Fields.Item("ДлинаСтрокиКонечныйОстаток").Value                               
                               
                                .Sort = "" : .MoveFirst
                               
                                Do Until .EOF
                                        With .Fields
                                                WScript.StdOut.Write Left(CStr(.Item("ДатаНачала").Value) & Space(10), 10) & " / "
                                                WScript.StdOut.Write Left(CStr(.Item("ДатаКонца").Value) & Space(10), 10) & "|"
                                                WScript.StdOut.Write Right(Space(intBeginSummMaxLen) & FormatCurrency(.Item("НачальныйОстаток").Value, 2), intBeginSummMaxLen) & "|"
                                                WScript.StdOut.Write Right(Space(intCreditMaxLen) & FormatCurrency(.Item("ВсегоПоступило").Value, 2), intCreditMaxLen) & "|"                                               
                                                WScript.StdOut.Write Right(Space(intDebitMaxLen) & FormatCurrency(.Item("ВсегоСписано").Value, 2), intDebitMaxLen) & "|"
                                                WScript.StdOut.Write Right(Space(intEndSummMaxLen) & FormatCurrency(.Item("КонечныйОстаток").Value, 2), intEndSummMaxLen)                                               
                                                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



Время: 19:04.

Время: 19:04.
© OSzone.net 2001-