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

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

Ответить
Настройки темы
VBS/WSH/JS - массив из строк, поиск по строке

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


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

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


Добрый день.
Пытаюсь решить задачу по парсингу лог-файла с конца самого файла. Получилось поделить лог на строки и строки положить в одномерный массив. Вот только как произвести поиск по строке, которая лежит внутри ячейки одномерного массива?

На примере:

вот такой вариант работает (ищет точку входа в строку):
Код: Выделить весь код
z = "    2017-06-07 23:01 Пользователь  sadfasdasd qwddsda dqwd sad qwdsad asd"
y = InStr(1, z, "Пользователь")
а вот такой нет (всегда 0):

Код: Выделить весь код
z = my_arr(10) ' в данной ячейке лежит строка "    2017-06-07 23:01 Пользователь  sadfasdasd qwddsda dqwd sad qwdsad asd"
y = InStr(1, z, "Пользователь")

Отправлено: 16:55, 08-06-2017

 

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


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

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


Проверь формат ячейки (as string ?). У меня твой пример работает.
Код: Выделить весь код
y=InStr(1, my_arr(10), "польз", vbTextCompare)

Последний раз редактировалось nexochyka, 08-06-2017 в 18:23.


Отправлено: 18:15, 08-06-2017 | #2



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

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


Ветеран


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

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


Цитата matson:
с конца самого файла. »
и:
Цитата matson:
положить в одномерный массив »
входят в явное противоречие. Используйте базу данных.

Цитата matson:
внутри ячейки одномерного массива? »
У массивов нет ячеек. Есть элементы.

Цитата matson:
а вот такой нет (всегда 0): »
Чушь.

Упакуйте образец лог-файла в архив и приложите к сообщению. Опишите задачу.

Отправлено: 18:40, 08-06-2017 | #3


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


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

Профиль | Отправить 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
Благодарности: 260

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


По логу (ровно как и по самой постановке задачи) ничего не понятно: нужно извлекать данные из лога по какому критерию? На какие значения нужно опираться? Зачем каждую строку пихать в массив, чай ведь не экономный расход ресурсов?

Отправлено: 11:27, 09-06-2017 | #5


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


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

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


Смотрите: в логах ищем строку "Задание "BackGTD" завершено. Ошибок:". При нахождении подстроки в элементе массива (InStr >0) начинаем работать со строкой и получать дату-время, количество ошибок и т.п., а это отправляется на zabbix.
Цитата greg zakharov:
Зачем каждую строку пихать в массив, чай ведь не экономный расход ресурсов? »
Если вы подскажете более правильный и красивый вариант, я буду очень признателен. Не нашел пока более правильного варианта поиска данных в строке, если строк с одинаковым текстом может быть несколько (то есть несколько одинаковых строк "Задание "BackGTD" завершено. Ошибок:", только разное количество ошибок)

Отправлено: 11:39, 09-06-2017 | #6


Забанен


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

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


Есть такая штука, RegExp называется. Открываете файл на чтение, читаете построчно, и если строкка соответствует шаблону регулярного выражения, извлекаете данные из подгрупп регулярки (дату, количество ошибок, обработанных файлов и дыр и пыр).

Отправлено: 11:51, 09-06-2017 | #7


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


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

Профиль | Отправить 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
Благодарности: 0

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


дело было не в бобине, дело было в кодировке...

Отправлено: 15:13, 09-06-2017 | #9


Ветеран


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

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


Цитата matson:
дело было не в бобине, дело было в кодировке... »
Вот потому и предлагалось:
Цитата Iska:
Упакуйте образец лог-файла в архив и приложите к сообщению. »
а не копировать «кусок лога» в виде текста.
Это сообщение посчитали полезным следующие участники:

Отправлено: 19:47, 09-06-2017 | #10



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

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

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
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




 
Переход