Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Экспорт данных из одного txt файла в другой

Ответить
Настройки темы
VBS/WSH/JS - [решено] Экспорт данных из одного txt файла в другой

Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


Добрый день!
Нужна помощь: есть файл 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=%
Спасайте.

Отправлено: 10:17, 21-08-2012

 

Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


Например, так:
читать дальше »
Код: Выделить весь код
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
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:33, 21-08-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 19:58, 21-08-2012 | #3


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


В реальном файле «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
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:30, 22-08-2012 | #4


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 05:00, 22-08-2012 | #5


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 05:58, 22-08-2012 | #6


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить PM | Цитировать


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

Отправлено: 06:53, 22-08-2012 | #7


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 07:20, 22-08-2012 | #8


Ветеран


Сообщения: 27449
Благодарности: 8086

Профиль | Отправить 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 "Номер",                  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
'=============================================================================

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

Отправлено: 08:39, 22-08-2012 | #9


Новый участник


Сообщения: 30
Благодарности: 0

Профиль | Отправить PM | Цитировать


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

Отправлено: 08:51, 22-08-2012 | #10



Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - [решено] Экспорт данных из одного txt файла в другой

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
PowerShell - [решено] Поиск и вставка информации из одного csv-файла в другой IvanXXL Скриптовые языки администрирования Windows 1 20-07-2011 12:48
[решено] Передача данных с одного ПК на другой Cjing Хочу все знать 7 25-04-2010 23:44
Проблема с копированием данных с одного харда на другой 3Darking Непонятные проблемы с Железом 9 01-04-2009 15:00
Разное - Преобразование одного формата файла в другой Evgesha_572 Программирование и базы данных 3 04-02-2009 14:57
Как экспортировать поле из одного dbf файла в другой? Raman Программное обеспечение Windows 1 04-04-2008 14:30




 
Переход