|
Компьютерный форум OSzone.net » Программирование, базы данных и автоматизация действий » Скриптовые языки администрирования Windows » VBS/WSH/JS - массив из строк, поиск по строке |
|
|
VBS/WSH/JS - массив из строк, поиск по строке
|
Новый участник Сообщения: 11 |
Добрый день.
Пытаюсь решить задачу по парсингу лог-файла с конца самого файла. Получилось поделить лог на строки и строки положить в одномерный массив. Вот только как произвести поиск по строке, которая лежит внутри ячейки одномерного массива? На примере: вот такой вариант работает (ищет точку входа в строку): z = " 2017-06-07 23:01 Пользователь sadfasdasd qwddsda dqwd sad qwdsad asd" y = InStr(1, z, "Пользователь") |
|
Отправлено: 16:55, 08-06-2017 |
Новый участник Сообщения: 9
|
Профиль | Отправить PM | Цитировать |
Последний раз редактировалось nexochyka, 08-06-2017 в 18:23. Отправлено: 18:15, 08-06-2017 | #2 |
Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети. Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля. |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать Цитата matson:
Цитата matson:
Цитата matson:
Цитата matson:
Упакуйте образец лог-файла в архив и приложите к сообщению. Опишите задачу. |
||||
Отправлено: 18:40, 08-06-2017 | #3 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать задача: есть лог от Cobian Backup, необходимо получить данные о успешном/не успешном резервном копировании и количестве ошибок (если есть). Задание может выполняться несколько раз за сутки, следовательно необходима самая последняя запись в txt (поэтому читаем лог снизу вверх). По завершении задачи будет запускаться данный скрипт (средствами Cobian).
нет никакого смысла использовать бд для такой простой задачи, не люблю плодить сущности. Для вашего "чушь" гифка по ссылке как это работает (точнее как не работает)GIF msgbox (TypeName(my_arr(9))) говорит что лежит строка Кусок лога имеет такой вид 2017-06-07 18:10 -- 2017-06-07 21:00 *** Запущено новое копирование. Заданий в очереди: 1 *** 2017-06-07 21:00 Отключение возможности входа в спящий режим... 2017-06-07 21:00 ** Выполнение задания "BackGTD" ** 2017-06-07 21:00 Подсчёт файлов в задании "BackGTD"... 2017-06-07 21:00 Запуск теневого копирования тома: D:\ 2017-06-07 21:01 Теневая копия создана 2017-06-07 21:01 Соединение с "192.168.3.8:21"... 2017-06-07 21:01 TLS недоступен на указанном сервере, попытка обычного соединения... 2017-06-07 21:01 Пользователь "administrator" начал сеанс связи с "192.168.3.8:21" 2017-06-07 21:01 Каталог "BackGTD 2017-06-07 21;01;07 (Разностный)" создан 2017-06-07 21:01 Каталог cменён на "BackGTD 2017-06-07 21;01;07 (Разностный)" 2017-06-07 21:01 Закачка каталога "GLOBALROOT\Device\HarddiskVolumeShadowCopy11\BackGTD" 2017-06-07 21:44 Удаление теневой копии "587861c8-ae9a-494f-b00d-428cd458c070" 2017-06-07 21:44 Теневая копия удалена 2017-06-07 21:44 Общее время выполнения задания "BackGTD": 0 ч., 44 мин., 11 сек. 2017-06-07 21:44 ** Задание "BackGTD" завершено. Ошибок: 0, обработано файлов: 45789, скопировано файлов: 5131, общий размер: 25,91 GB ** 2017-06-07 21:44 -- 2017-06-07 21:44 Возможность входа в спящий режим включена 2017-06-07 21:44 Общее время копирования: 0 ч., 44 мин., 15 сек. 2017-06-07 21:44 *** Копирование завершено. Ошибок: 0, обработано файлов: 45789, скопировано файлов: 5131, общий размер: 25,91 GB *** 2017-06-07 21:44 -- вот таким скриптом получаю строки. В 9 элементе массива лежит строка "2017-06-07 23:01 Пользователь....". На количество переменных не обращайте внимания, Dim F, i, s, fn, FSO, ForReading, AllTxt, listLines, str, x, arr_Line, my_arr(), y, z, nStrok, SearchString ForReading = 1 fn = "C:\Users\root\Desktop\log 2017-06-07.txt" '// <-- full path arr_Line = 0 Set FSO = CreateObject("Scripting.FileSystemObject") Set F = FSO.OpenTextFile(fn, ForReading, False, -2) Do Until F.AtEndOfStream ' пока наступит конец файла Redim Preserve my_arr(arr_Line) my_arr(arr_Line) = F.ReadLine ' Считываем строку arr_Line = arr_Line + 1 nStrok = UBound(my_arr) Loop F.Close msgbox my_arr(9) 'z = "2017-06-07 23:01 Пользователь sadfasdasd qwddsda dqwd sad qwdsad asd" y = InStr(1, my_arr(9), "Польз", vbTextCompare) msgbox y |
Последний раз редактировалось matson, 09-06-2017 в 11:14. Отправлено: 11:03, 09-06-2017 | #4 |
Забанен Сообщения: 793
|
По логу (ровно как и по самой постановке задачи) ничего не понятно: нужно извлекать данные из лога по какому критерию? На какие значения нужно опираться? Зачем каждую строку пихать в массив, чай ведь не экономный расход ресурсов?
|
|
Отправлено: 11:27, 09-06-2017 | #5 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Смотрите: в логах ищем строку "Задание "BackGTD" завершено. Ошибок:". При нахождении подстроки в элементе массива (InStr >0) начинаем работать со строкой и получать дату-время, количество ошибок и т.п., а это отправляется на zabbix.
Цитата greg zakharov:
|
|
Отправлено: 11:39, 09-06-2017 | #6 |
Забанен Сообщения: 793
|
Есть такая штука, RegExp называется. Открываете файл на чтение, читаете построчно, и если строкка соответствует шаблону регулярного выражения, извлекаете данные из подгрупп регулярки (дату, количество ошибок, обработанных файлов и дыр и пыр).
|
Отправлено: 11:51, 09-06-2017 | #7 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать Толи лыжи не едут...
пытаюсь сделать проверку на чтении построчно Dim F, i, s, fn, FSO, ForReading, AllTxt, listLines, str, x, arr_Line, my_arr(), y, z, nStrok, SearchString ForReading = 1 fn = "C:\Users\root\Desktop\log 2017-06-07.txt" '// <-- full path arr_Line = 0 Set FSO = CreateObject("Scripting.FileSystemObject") Set F = FSO.OpenTextFile(fn, ForReading, False, -2) SearchString = "Теневая копия создана" Do Until F.AtEndOfStream ' пока наступит конец файла Str = F.ReadLine If (InStr(1, Str, SearchString) > 0) Then MsgBox Str End If Loop F.Close |
Отправлено: 13:35, 09-06-2017 | #8 |
Новый участник Сообщения: 11
|
Профиль | Отправить PM | Цитировать дело было не в бобине, дело было в кодировке...
|
Отправлено: 15:13, 09-06-2017 | #9 |
Ветеран Сообщения: 27449
|
Профиль | Отправить PM | Цитировать |
Отправлено: 19:47, 09-06-2017 | #10 |
|
![]() |
Участник сейчас на форуме |
![]() |
Участник вне форума |
![]() |
Автор темы |
![]() |
Сообщение прикреплено |
| |||||
Название темы | Автор | Информация о форуме | Ответов | Последнее сообщение | |
CMD/BAT - Поиск слова в строке из реестра | Сиволапый | Скриптовые языки администрирования Windows | 22 | 31-03-2017 07:27 | |
PowerShell - Поиск в AD по строке из внешнего файла. | Gluteus Maximus | Скриптовые языки администрирования Windows | 1 | 03-09-2015 10:08 | |
CMD/BAT - Поиск и удаление строк в файле по сложным условиям | i7allia | Скриптовые языки администрирования Windows | 2 | 30-10-2013 17:06 | |
CMD/BAT - поиск строк по шаблону и запись в отдельный файл | AVTS | Скриптовые языки администрирования Windows | 4 | 13-07-2012 00:51 | |
CMD/BAT - Поиск и копирование нескольких строк из текстового файла. | valen | Скриптовые языки администрирования Windows | 0 | 07-11-2011 17:27 |
|