Версия для печати
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум на Исходниках.RU > Visual Basic: Общие вопросы > VBScript и регулярные выражения |
Автор: nil5 03.07.07, 12:17 |
Первый раз использую vbs. Прошу сразу заметить, что не VB для которого есть проекты в студии и который компилится, а именно скриптовый vbs. Код приходится набирать в блокноте После чего это код встраивается в МОМ. Так вот, скрипт парсит строку, я решил для это использовать регулярные выражения, дабы работал уже с ними в perl. Попробовал сделать следующие <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Parameter12 = ~m/BatteryInfoAvaible\s*=\s*(\d);/ Set BatteryInfoAvaible = $1; Не вышло. После чего полез в инет, где все пишут об библиотеке выражений для VB, которую подключать надо через студию. Я так понимаю для меня это не подходит. Подскажите как правильно использовать выражения в vbs. |
Автор: ANDLL 03.07.07, 12:23 |
Класс VBScript_RegExp_55.RegExp Аля Set A=Createobject("VBScript_RegExp_55.RegExp") и далее использовать ровно также как будто он подключен через студию |
Автор: nil5 03.07.07, 12:24 |
Круто!!! Сейчас попробую. |
Автор: MIF 03.07.07, 12:34 |
Я бы посоветовал отладку кода делать в ВБ, а потом переносить в ВБС. Это позволит при отладке использовать early binding, intellisence поможет писать код, а перед перенесением кода заменить декларацию и инициализацию объектов на Createobject. |
Автор: nil5 03.07.07, 12:36 |
MIF, спасибо, я уже сам додумался Добавлено хм, ну вот что я попробовал <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 и получил бы значение группы, а как здесь. |
Автор: ANDLL 03.07.07, 12:49 |
submatches коллекция |
Автор: nil5 03.07.07, 12:53 |
победил зверя! Всем спасибо. |
Автор: nil5 03.07.07, 14:42 |
Написал я скрипт. Протестировал в студии. Потом перенес на другую машину где стоит МОМ и вот что он мне сказал 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, но она меньше по размеру чем на моей. Ее наверно надо разрегистрировать добавить новую и зарегистрировать. Так? Добавлено да собственно не в машине дело. Скрипт не запускается на любой машине, мне кажется я просто неправильно создаю объекты <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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") Вот так у меня. Что здесь может быть не так? |
Автор: ANDLL 03.07.07, 16:32 |
Все нетак, кроме первой строчки |
Автор: nil5 03.07.07, 19:16 |
ANDLL а можно пояснить, если не затруднит. |
Автор: nash 03.07.07, 20:37 |
Цитата nil5 @ Set Matches = CreateObject("VBScript_RegExp_55.MatchCollection") Set Match = CreateObject("VBScript_RegExp_55.Match") Set SubMatch = CreateObject("VBScript_RegExp_55.SubMatches") вот это не надо создавать. просто объяви переменные. |
Автор: nil5 04.07.07, 09:31 |
упростил скрипт до предела, вот весь его код <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Option Explicit Set reg = CreateObject("VBScript_RegExp_55.RegExp") но при запуске получаю следующие сообщение: "Невозможно создание объекта контейнером ActiveX: 'VBScript_RegExp_55.RegExp'" |
Автор: Dmitrii 04.07.07, 10:24 |
А если так: <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> Set reg = CreateObject("VBScript.RegExp") |
Автор: nil5 04.07.07, 10:54 |
<{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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 этой библиотекой? |
Автор: Dmitrii 04.07.07, 11:42 |
Цитата nil5 @ Попробуйте так:Теперь выскакивает следующая ошибка "Недопустимое число аргументов или присвоение значения свойства" и ссылается на Matches = reg.Execute(Inf) Как я понял метод ругается на возвращаемое значение. Как дальше то с ним работать? <{CODE_COLLAPSE_OFF}><{CODE_WRAP_OFF}> 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) |
Автор: nil5 04.07.07, 12:52 |
Спасибо! Вроде заработало. |