|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - VBS. Прочитать определенные строки из файла |
|
VBS/WSH/JS - VBS. Прочитать определенные строки из файла
|
Новый участник Сообщения: 24 |
Имеются файлы со следующим содержимым:
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
|
Профиль | Отправить PM | Цитировать alex1985khv, упакуйте образец реального файла в архив, приложите к сообщению. Максимальный размер одного такого файла каков может быть?
|
Отправлено: 19:27, 02-11-2015 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Новый участник Сообщения: 24
|
Профиль | Отправить 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
|
Профиль | Отправить PM | Цитировать Цитата alex1985khv:
Ну, попробуйте так: Скрытый текст
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 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
Разное - [решено] Как удалить все профили почты 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 |
|