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

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

Ответить
Настройки темы
VBS/WSH/JS - VBS. Прочитать определенные строки из файла

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


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

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


Имеются файлы со следующим содержимым:

Acct Number & Extension 4437761038265905889 Merchant State/Prov. Code
Floor Limit Indicator Requested Payment Service
CRB/Exception File Ind Number of Payment Forms
PCAS Indicator Usage Code 1
Acquirer Reference Nbr 74647875158522522154444 Chargeback Reason Code 00
Acquirer's Business ID 00000000 Settlement Flag 8
Purchase Date 20150607 Auth Characteristics Ind N
Destination Amount 000000105423 Authorization Code
Destination Currency Code 643 POS Terminal Capability 9
Source Amount 000000105423 International Fee Ind
Source Currency Code 643 Cardholder ID Method 4
Merchant Name PAYPAL *ITRADEZONE Collection-Only Flag
Merchant City 35314369001 POS Entry Mode 01
Merchant Country Code RU Central Processing Date 20150608
Merchant Category Code 5732 Reimbursement Attribute 0
Merchant ZIP Code 00000

Нужно сделать так, чтобы выводилось из этого файла (в выходной файл output.txt выгружать) значения в строках Acct Number & Extension, Acquirer Reference Nbr и Source Amount.
На примере выше должно выглядеть как:
74647875158522522154444, 4437761038265905889, 000000105423
....
....(и т.д.)
Через точку с запятой или просто запятой перечислять. Весь файл содержит шаблоны как выше, только цифры разные. Пример ниже выводит только Acquirer Reference Nbr, а как прицепить в цикле два других значения, чтобы в одной строке были перечислены?


Const ForReading = 1
Dim strSearchString


Set objFSO = CreateObject("Scripting.FileSystemObject")
Set inFile = objFSO.OpenTextFile("C:\input.txt",ForReading)
Set outFile = objFSO.OpenTextFile("C:\output.txt",2,True)



Do While Not inFile.AtEndOfStream

strSearchString = inFile.ReadLine

If (Left(strSearchString,23) = " Acquirer Reference Nbr") then
outFile.Writeline Mid(strSearchString,28,23)
end if
Loop

inFile.Close
outFile.Close
WScript.Echo "Файл обработан"

Отправлено: 08:56, 02-11-2015

 

Ветеран


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

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


alex1985khv, упакуйте образец реального файла в архив, приложите к сообщению. Максимальный размер одного такого файла каков может быть?

Отправлено: 19:27, 02-11-2015 | #2



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

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


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


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

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


Iska, на работе, к сожалению, не могу приложить. Блокирует политикой доступа. Вес может быть до 20 мегабайт.
Сам файл состоит как из примера выше - после строки Merchant ZIP Code 00000 следует пару пустых строк ниже и опять Acct Number & Extension...Только в цифрах различие, которые мне надо выгрузить в отдельный файл.
Т.е. отобрать все строки, названия которых начинаются только на:
Acct Number & Extension
Acquirer Reference Nbr
Source Amount
И из них цифры (выделены жирным шрифтом), длина которых всегда фиксирована.
Acquirer Reference Nbr 74647875158522522154444 Chargeback Reason Code 00
Acct Number & Extension 4437761038265905889 Merchant State/Prov. Code
Source Amount 000000105423 International Fee Ind

Отправлено: 02:12, 03-11-2015 | #3


Ветеран


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

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


Цитата alex1985khv:
Сам файл состоит как из примера выше »
Сам файл может быть в произвольной кодировке. В случае юникода — с BOM или без. Могут быть разные концы строк.

Ну, попробуйте так:
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFile
Dim strDestFile

Dim strContent
Dim strOutputContent

Dim objMatch


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strSourceFile) Then
			strDestFile = "output.txt"
			
			With .OpenTextFile(strSourceFile)
				strContent = .ReadAll()
				.Close
			End With
			
			With WScript.CreateObject("VBScript.RegExp")
				.IgnoreCase = True
				.Global = True
				.Multiline = True
				.Pattern = _
					"^Acct Number & Extension (\d+) [\s\S]*?" & _
					"Acquirer Reference Nbr (\d+) [\s\S]*?" & _
					"Source Amount (\d+) .*$"
				
				If .Test(strContent) Then
					strOutputContent = ""
					
					For Each objMatch In .Execute(strContent)
						With objMatch.SubMatches
							strOutputContent = strOutputContent & .Item(1) & "," & .Item(0) & "," & .Item(2) & vbCrLf
						End With
					Next
				Else
					WScript.Echo "Can't find pattern [" & objRegExp.Pattern & "]."
					WScript.Quit 3
				End If
			End With
			
			With .CreateTextFile(strDestFile)
				.Write strOutputContent
				.Close
			End With
		Else
			WScript.Echo "Can't find source file [" & strSourceFile & "]."
			WScript.Quit 2
		End If
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo """ & WScript.ScriptName & """ <Source file>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к исходному файлу указывается аргументом скрипта (также можно просто перетащить исходный файл на скрипт в Проводнике).
Это сообщение посчитали полезным следующие участники:

Отправлено: 03:16, 03-11-2015 | #4



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - [решено] Как удалить все профили почты outlook из командной строки? (CMD)(vbs) merdzd Microsoft Office (Word, Excel, Outlook и т.д.) 7 17-12-2015 07:02
Любой язык - [решено] Извлечь определенные строки по счету из одного тхт файла в другой Alexander_88 Скриптовые языки администрирования Windows 11 13-06-2015 12:48
VBS/WSH/JS - VBS. Исключить из копирования определенные файлы. serixxxo Скриптовые языки администрирования Windows 2 20-05-2014 11:59
VBS/WSH/JS - [решено] из строк текстового файла нужно вырезать определенные символы alek2012 Скриптовые языки администрирования Windows 10 11-07-2012 16:54
CMD/BAT - [решено] Имя файла из строки копируемого файла. Seryoga204 Скриптовые языки администрирования Windows 20 16-03-2011 21:15




 
Переход