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

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

Ответить
Настройки темы
VBS/WSH/JS - [решено] Поиск строки по части названия и вывод данных в ECHO

Пользователь


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

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


Изменения
Автор: Kainos
Дата: 16-04-2015
Уважаемые форумчане!

Прошу вашего содействия в написании скрипта который искал бы данные с конца документа (документ во вложении).

Данные которые нужно найти:
MEIBillAccFWDownLoad 04/15 10:51:30 7,222,765 0AFC> Acceptor application software version is 286170390
MEIBillAccFWDownLoad 04/15 10:51:30 7,222,906 0AFC> Acceptor variant firmware version is 491908270
MEIBillAccFWDownLoad 04/15 10:51:30 7,223,078 0AFC> Acceptor serial number is 02294401340

Подчеркнуты статичные данные.

Принцип работы следующий:
1. Найти с конца документа эти 3 строки (их может быть больше, но нам нужны самые свежие которые располагаются в конце лога).
2. Вывести на экран следующую информацию:

04/15 10:51:30 Acceptor application software version is 286170390
04/15 10:51:30 Acceptor variant firmware version is 491908270
04/15 10:51:30 Acceptor serial number is 02294401340

Отправлено: 13:03, 15-04-2015

 

Ветеран


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

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


Попробуйте так (на WSH):
Скрытый текст
Код: Выделить весь код
Option Explicit

Dim strSourceFile

Dim strContent
Dim arrPatterns
Dim strPattern


If WScript.Arguments.Count = 1 Then
	strSourceFile = WScript.Arguments.Item(0)
	
	With WScript.CreateObject("Scripting.FileSystemObject")
		If .FileExists(strSourceFile) Then
			With .OpenTextFile(strSourceFile)
				strContent = .ReadAll()
				.Close
			End With
		Else
			WScript.Echo "Can't find source file [" & strSourceFile & "]."
			WScript.Quit 2
		End If
	End With
	
	arrPatterns = Array( _
		"MEIBillAccFWDownLoad (\d{2}/\d{2} \d{2}:\d{2}:\d{2} ).* (Acceptor application software version is \d+)", _
		"MEIBillAccFWDownLoad (\d{2}/\d{2} \d{2}:\d{2}:\d{2} ).* (Acceptor variant firmware version is \d+)", _
		"MEIBillAccFWDownLoad (\d{2}/\d{2} \d{2}:\d{2}:\d{2} ).* (Acceptor serial number is \d+)" _
	)
	
	With WScript.CreateObject("VBScript.RegExp")
		.IgnoreCase = True
		.Global     = True
		
		For Each strPattern In arrPatterns
			.Pattern = strPattern
			
			If .Test(strContent) Then
				With .Execute(strContent)
					With .Item(.Count - 1).Submatches
						WScript.Echo .Item(0) & .Item(1)
					End With
				End With
			Else
				WScript.Echo "Can't find pattern [" & .Pattern & "] in source file [" & strSourceFile & "]."
			End If
		Next
	End With
Else
	WScript.Echo "Usage: cscript.exe //nologo " & WScript.ScriptName & " <Source file>"
	WScript.Quit 1
End If

WScript.Quit 0

Путь к исходному файлу указывается аргументом скрипта.

Последний раз редактировалось Iska, 16-04-2015 в 11:11. Причина: Добавлено «.Global = True»

Это сообщение посчитали полезным следующие участники:

Отправлено: 16:07, 15-04-2015 | #2



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

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


Ветеран


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

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


Вариант на PowerShell:
Код: Выделить весь код
$data = get-content meibillaccfwdownload_093013.log | select-string '.+Acceptor.+is\s\d+'

$data[-3..-1] | foreach {

    $_ -replace '.*(\d{2}/\d{2}\s(\d{2}:?)+).+>(\s.+)$','$1$3'

}
Это сообщение посчитали полезным следующие участники:

Отправлено: 17:35, 15-04-2015 | #3


Ветеран


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

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


Цитата Foreigner:
… select-string '.+Acceptor.+is\s\d+'
$data[-3..-1] …»
Это если быть уверенным, что строки с Acceptor будут строго по трое, не вперемежку.
Это сообщение посчитали полезным следующие участники:

Отправлено: 18:38, 15-04-2015 | #4


Ветеран


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

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


Iska, Ну ТС сказал, что новые строки дописываются в конец лога, вряд ли они могут перемешаться с предыдущими записями.
Это сообщение посчитали полезным следующие участники:

Отправлено: 22:08, 15-04-2015 | #5


Пользователь


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

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


Iska, скрипт очень классный но почему то выдает данные с начала файла а не с конца. Можно это исправить?

Foreigner, Спасибо за скрипт, но к сожалению в той среде где он будет применяться нет PowerShell.

Последний раз редактировалось Kainos, 16-04-2015 в 10:25.


Отправлено: 08:53, 16-04-2015 | #6


Ветеран


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

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


Цитата Kainos:
Iska, скрипт очень классный но почему то выдает данные с начала файла а не с конца. Можно это исправить? »
Kainos, добавьте «.Global = True» после «.IgnoreCase = True»:
Код: Выделить весь код
		.IgnoreCase = True
		.Global     = True
Я поправил свой код выше.
Это сообщение посчитали полезным следующие участники:

Отправлено: 11:10, 16-04-2015 | #7


Пользователь


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

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


Iska, Подскажите а можно добавить в текст вывода дополнительные слова (если это не сложно)?

Пример:
Было:
04/15 10:51:30 Acceptor application software version is 286170390
04/15 10:51:30 Acceptor variant firmware version is 491908270
04/15 10:51:30 Acceptor serial number is 02294401340

Стало:
04/15 10:51:30 Acceptor application software (Текст1) version is 286170390
04/15 10:51:30 Acceptor variant firmware (Текст2) version is 491908270
04/15 10:51:30 Acceptor serial number (Текст3) is 02294401340


Если для этого необходимо менять скрипт тогда обойдусь.

Отправлено: 12:57, 16-04-2015 | #8


Ветеран


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

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


Kainos, почему именно в середину шаблона поиска? Как Вы определяете место, куда надо вставлять текст?

Отправлено: 13:27, 16-04-2015 | #9


Пользователь


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

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


Iska, Если проще в начале то меня устроит. Ну или в любом другом месте.

Последний раз редактировалось Kainos, 16-04-2015 в 13:57.


Отправлено: 13:43, 16-04-2015 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
CMD/BAT - Поиск строки по слову и добавление новой строки после найденой. Mikhael2011 Скриптовые языки администрирования Windows 17 16-03-2017 03:37
VBS/WSH/JS - поиск слова в тексте и вывод части текста после искомого слова sergey23031978 Скриптовые языки администрирования Windows 9 18-02-2015 16:54
VBS/WSH/JS - [решено] Поиск строки по маске в txt файле и замена всей строки из InputBox ultrarare Скриптовые языки администрирования Windows 11 03-07-2013 14:37
CMD/BAT - Выборка файлов по части названия скуби_ДУ Скриптовые языки администрирования Windows 7 03-08-2011 10:35




 
Переход