Наши проекты:
Журнал · Discuz!ML · Wiki · DRKB · Помощь проекту |
||
ПРАВИЛА | FAQ | Помощь | Поиск | Участники | Календарь | Избранное | RSS |
[3.142.197.198] |
|
Страницы: (2) [1] 2 все ( Перейти к последнему сообщению ) |
Сообщ.
#1
,
|
|
|
Первый раз использую vbs. Прошу сразу заметить, что не VB для которого есть проекты в студии и который компилится, а именно скриптовый vbs.
Код приходится набирать в блокноте После чего это код встраивается в МОМ. Так вот, скрипт парсит строку, я решил для это использовать регулярные выражения, дабы работал уже с ними в perl. Попробовал сделать следующие Parameter12 = ~m/BatteryInfoAvaible\s*=\s*(\d);/ Set BatteryInfoAvaible = $1; Не вышло. После чего полез в инет, где все пишут об библиотеке выражений для VB, которую подключать надо через студию. Я так понимаю для меня это не подходит. Подскажите как правильно использовать выражения в vbs. |
Сообщ.
#2
,
|
|
|
Класс VBScript_RegExp_55.RegExp
Аля Set A=Createobject("VBScript_RegExp_55.RegExp") и далее использовать ровно также как будто он подключен через студию |
Сообщ.
#3
,
|
|
|
Круто!!! Сейчас попробую.
|
Сообщ.
#4
,
|
|
|
Я бы посоветовал отладку кода делать в ВБ, а потом переносить в ВБС.
Это позволит при отладке использовать early binding, intellisence поможет писать код, а перед перенесением кода заменить декларацию и инициализацию объектов на Createobject. |
Сообщ.
#5
,
|
|
|
MIF, спасибо, я уже сам додумался
Добавлено хм, ну вот что я попробовал Dim myReg As New VBScript_RegExp_55.RegExp Dim oMatches As VBScript_RegExp_55.MatchCollection Dim oMatch As VBScript_RegExp_55.Match Dim val As Integer Dim str As String str = "BatteryVoltageLow = 0;" myReg.Pattern = ".*BatteryVoltageLow\s*=\s*(\d);.*" oMatches = myReg.Execute(str) oMatch = oMatches(0) val = oMatch.Value в val мне возвращается вся строка, а мне надо только чтоб я получил 0, я ведь для этого и сгруппировал (\d), в перле я бы взял $1 и получил бы значение группы, а как здесь. |
Сообщ.
#6
,
|
|
|
submatches коллекция
|
Сообщ.
#7
,
|
|
|
победил зверя! Всем спасибо.
|
Сообщ.
#8
,
|
|
|
Написал я скрипт. Протестировал в студии. Потом перенес на другую машину где стоит МОМ и вот что он мне сказал
Description: An error occurred on line 13 while executing script 'CreateController' Source: Microsoft VBScript runtime error Description: ActiveX component can't create object: 'VBScript_RegExp_55.RegExp' . Please refer to the events associated with this alert to view the computers on which this problem occurred. Т.е. нет этой компанента на этой машине, как мне его найти и правильно зарегистрировать. Добавлено посмотрел на маштне с МОМ, есть длл vbscript, но она меньше по размеру чем на моей. Ее наверно надо разрегистрировать добавить новую и зарегистрировать. Так? Добавлено да собственно не в машине дело. Скрипт не запускается на любой машине, мне кажется я просто неправильно создаю объекты Set reg = CreateObject("VBScript_RegExp_55.RegExp") Set Matches = CreateObject("VBScript_RegExp_55.MatchCollection") Set Match = CreateObject("VBScript_RegExp_55.Match") Set SubMatch = CreateObject("VBScript_RegExp_55.SubMatches") Вот так у меня. Что здесь может быть не так? |
Сообщ.
#9
,
|
|
|
Все нетак, кроме первой строчки
|
Сообщ.
#10
,
|
|
|
ANDLL а можно пояснить, если не затруднит.
|
Сообщ.
#11
,
|
|
|
Цитата nil5 @ Set Matches = CreateObject("VBScript_RegExp_55.MatchCollection") Set Match = CreateObject("VBScript_RegExp_55.Match") Set SubMatch = CreateObject("VBScript_RegExp_55.SubMatches") вот это не надо создавать. просто объяви переменные. |
Сообщ.
#12
,
|
|
|
упростил скрипт до предела, вот весь его код
Option Explicit Set reg = CreateObject("VBScript_RegExp_55.RegExp") но при запуске получаю следующие сообщение: "Невозможно создание объекта контейнером ActiveX: 'VBScript_RegExp_55.RegExp'" |
Сообщ.
#13
,
|
|
|
А если так:
Set reg = CreateObject("VBScript.RegExp") |
Сообщ.
#14
,
|
|
|
Dim reg Set reg = CreateObject("VBScript.RegExp") Dim Matches, Match, SubMatch, Inf Inf = "BatteryInfoAvaible =5;" reg.Pattern = ".*BatteryInfoAvaible\s*=\s*(\d);.*" Matches = reg.Execute(Inf) Match = Matches(0) SubMatch = Match.SubMatches Set BatteryInfoAvaible = SubMatch.Item(0) Теперь выскакивает следующая ошибка "Недопустимое число аргументов или присвоение значения свойства" и ссылается на Matches = reg.Execute(Inf) Как я понял метод ругается на возвращаемое значение. Как дальше то с ним работать? Добавлено а кто-нибудь сам уже пользовался в VBS этой библиотекой? |
Сообщ.
#15
,
|
|
|
Цитата nil5 @ Попробуйте так:Теперь выскакивает следующая ошибка "Недопустимое число аргументов или присвоение значения свойства" и ссылается на Matches = reg.Execute(Inf) Как я понял метод ругается на возвращаемое значение. Как дальше то с ним работать? Dim reg Set reg = CreateObject("VBScript.RegExp") Dim objMatches, objMatch, objSubMatch, Inf Inf = "BatteryInfoAvaible =5;" reg.Pattern = ".*BatteryInfoAvaible\s*=\s*(\d);.*" Set objMatches = reg.Execute(Inf) Set objMatch = objMatches.Item(0) Set objSubMatch = objMatch.SubMatches BatteryInfoAvaible = objSubMatch.Item(0) |