|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - как получить время и из строки в логе с определенным событием |
|
VBS/WSH/JS - как получить время и из строки в логе с определенным событием
|
Старожил Сообщения: 440 |
еще интересно как к примеру получить время и из строки в логе с определенным событием
к примеру вот такой лог (log.txt) мне нужно получить время последнего нужного события |
|
Отправлено: 19:32, 07-01-2011 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать mitiya,
Предположим, что лог-файл находится в «c:\0001\0001.txt» и имеет кодировку ANSI. Тогда извлечь время (опять же, поскольку Вы не указали, — по моим предположениям, что именно эти символы — время) последнего совпавшего события можно, например, так: Поскольку Вы не указали примерный размер лог-файла, чтение и разбор файла в примере производится не целиком, а построчно. |
Последний раз редактировалось Iska, 07-01-2011 в 22:12. Отправлено: 20:23, 07-01-2011 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Старожил Сообщения: 440
|
Профиль | Отправить PM | Цитировать сразу несколько вопросов.
1. хотел вынести путь к файлу в переменную но скрипт начал выдавать ошибку Dim logpath = C:\0001\0001.txt дальше по коду некоторые места непонятны Option Explicit <-- зачем это Const ForReading = 1 Dim objRegExp Dim objMatch Dim strLine Dim strTrueLine Dim strSubMatch Set objRegExp = WScript.CreateObject("VBScript.RegExp") objRegExp.Pattern = "\[\d{8}:(\d{6}.\d{2})\]:нужное событие" With WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile("C:\0001\0001.txt", ForReading) я так понимаю тут Do Until .AtEndOfStream получается последняя нужная строка strLine = .ReadLine() If objRegExp.Test(strLine) Then strTrueLine = strLine End If Loop .Close End With For Each objMatch In objRegExp.Execute(strTrueLine) а тут то что не понятно For Each strSubMatch In objMatch.SubMatches кроме вывода времени. WScript.Echo strSubMatch так и не понял как отделили время от всей остальной строки Next Next Set objRegExp = Nothing WScript.Quit 0 |
Отправлено: 00:04, 08-01-2011 | #3 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата mitiya:
Dim logpath logpath = "C:\0001\0001.txt" … With WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(logpath, ForReading) … Цитата mitiya:
|
||
Отправлено: 01:16, 08-01-2011 | #4 |
Ветеран Сообщения: 2733
|
Профиль | Отправить PM | Цитировать Без рег выражений (цикл списал у Iska) обрабатываем файл построчно
LogFile = "e:\Delete\0001.txt" strFind = ":нужное событие" lastfound = "нужное событие не состоялось" i = 0 With CreateObject("Scripting.FileSystemObject").OpenTextFile(LogFile, 1) Do Until .AtEndOfStream RL = .ReadLine() j = InStr(1, RL, strFind) ' Ищем вхождение подстроки ":нужное событие" в каждой строке лог-файла If j > 0 Then lastfound = RL i = j End If Loop .Close End With MsgBox lastfound ' Если можно время с текстовкой If i > 0 Then MsgBox Mid(lastfound, 1, i - 1) ' Если только время со скобками -используем функцию Mid If i > 0 Then MsgBox Mid(lastfound, 2, i - 3) ' Если только время без скобок LogFile = "e:\Delete\0001.txt" strFind = ":нужное событие" lastfound = "нужное событие не состоялось" i = 0 With CreateObject("Scripting.FileSystemObject").OpenTextFile(LogFile, 1) RL = Split(Replace(.ReadAll(), Chr(13), ""), Chr(10)) .Close End With N = UBound(RL) For j = N To 1 Step -1 i = InStr(1, RL(j), strFind) If i > 0 Then lastfound = RL(j) Exit For End If Next MsgBox lastfound ' Если можно время с текстовкой If i > 0 Then MsgBox Mid(lastfound, 1, i - 1) ' Если только время со скобками If i > 0 Then MsgBox Mid(lastfound, 2, i - 3) ' Если только время без скобок |
|
------- Последний раз редактировалось megaloman, 08-01-2011 в 22:12. Отправлено: 21:15, 08-01-2011 | #5 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Цитата megaloman:
Но самый быстрый способ в данном конкретном случае такой: Option Explicit Const ForReading = 1 Dim LogFile Dim strText LogFile = "C:\0001\0001.txt" With WScript.CreateObject("Scripting.FileSystemObject").OpenTextFile(LogFile, ForReading) strText = .ReadAll .Close End With WScript.Echo Mid(strText, InStrRev(strText, "]:нужное событие") - 9, 9) WScript.Quit 0 |
|
Последний раз редактировалось SendMessage, 10-01-2011 в 08:55. Отправлено: 08:49, 10-01-2011 | #6 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 12:30, 10-01-2011 | #7 |
Старожил Сообщения: 175
|
Профиль | Отправить PM | Цитировать Iska, ну не стоит так уж заострять на этом внимание - вряд ли файл будет такого большого размера. Со 100 мб файлами мой скрипт вполне справляется.
А если уж он настолько велик, то и использовать FSO в любом виде уже не целесообразно (если только дробить, но не на строки, а при помощи Skip/Read). Как Вы справедливо и отметили. И скрипт будет совершенно другим по концепции. Но для этой конкретной задачи о нем, мне кажется, не стоит и заморачиваться. До тех пор пока не возникнет нужда. ![]() |
Отправлено: 13:19, 10-01-2011 | #8 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Дык, это
![]() |
Отправлено: 14:49, 10-01-2011 | #9 |
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - как получить дату и время, независимо от типа отображения даты ? | mitiya | Скриптовые языки администрирования Windows | 3 | 20-12-2010 11:14 | |
CMD/BAT - [решено] Подскажите как получить время изменения файла -15 минут | osp2008 | Скриптовые языки администрирования Windows | 7 | 29-07-2010 15:04 | |
[решено] Как получить данные в скрипт из командной строки? | madmasles | AutoIt | 2 | 27-11-2009 15:50 | |
Как получить время с сервера | lehha | Программирование и базы данных | 2 | 10-04-2004 00:49 | |
Как получить путь к файлу в виде строки на Visual Basic .NET | Igor Laptev | Программирование и базы данных | 1 | 14-10-2003 00:50 |
|