На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела Visual Basic: Общие вопросы
Здесь обсуждаются вопросы по языку Visual Basic 1-6 (а так же по схожим языкам, как, например, PowerBASIC).
Вопросы по Visual Basic .NET (это который входит в состав Visual Studio 2002/2003/2005/2008+, для тех, кто не в курсе) обсуждаются в разделе .NET.

Обратите внимание:
1. Прежде чем начать новую тему или отправить сообщение, убедитесь, что Вы не нарушаете правил форума!
2. Обязательно воспользуйтесь поиском. Возможно, Ваш вопрос уже обсуждали. Полезные ссылки приведены ниже.
3. Темы с просьбой выполнить какую-либо работу за автора в этом разделе не обсуждаются. Студенты, вам сюда: ПОМОЩЬ СТУДЕНТАМ!
4. Используйте теги [ code=vba ] ...текст программы... [ /code ] для выделения текста программы подсветкой.
5. Помните, здесь телепатов нет. Формулируйте свой вопрос максимально грамотно и чётко: Как правильно задавать вопросы
6. Запрещено отвечать в темы месячной (и более) давности, без веских на то причин.

Полезные ссылки:
user posted image FAQ Сайта user posted image FAQ Раздела user posted image Кладовка user posted image Наши Исходники user posted image API-Guide user posted image Поиск по Разделу user posted image MSDN Library Online user posted image Google

Ваше мнение о модераторах: user posted image SCINER, user posted image B.V.
Модераторы: SCINER, B.V.
Страницы: (2) [1] 2  все  ( Перейти к последнему сообщению )  
> VBScript и регулярные выражения , как использовать
    Первый раз использую vbs. Прошу сразу заметить, что не VB для которого есть проекты в студии и который компилится, а именно скриптовый vbs.
    Код приходится набирать в блокноте :(
    После чего это код встраивается в МОМ. Так вот, скрипт парсит строку, я решил для это использовать регулярные выражения, дабы работал уже с ними в perl.

    Попробовал сделать следующие

    ExpandedWrap disabled
      Parameter12 = ~m/BatteryInfoAvaible\s*=\s*(\d);/
      Set BatteryInfoAvaible = $1;


    Не вышло. После чего полез в инет, где все пишут об библиотеке выражений для VB, которую подключать надо через студию. Я так понимаю для меня это не подходит. Подскажите как правильно использовать выражения в vbs.
      Класс VBScript_RegExp_55.RegExp
      Аля
      Set A=Createobject("VBScript_RegExp_55.RegExp")
      и далее использовать ровно также как будто он подключен через студию
        Круто!!! Сейчас попробую.
          Я бы посоветовал отладку кода делать в ВБ, а потом переносить в ВБС.
          Это позволит при отладке использовать early binding, intellisence поможет писать код, а перед перенесением кода заменить декларацию и инициализацию объектов на Createobject.
            MIF, спасибо, я уже сам додумался ;)

            Добавлено
            хм, ну вот что я попробовал

            ExpandedWrap disabled
               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 и получил бы значение группы, а как здесь.
              submatches коллекция
                победил зверя! Всем спасибо.
                  Написал я скрипт. Протестировал в студии. Потом перенес на другую машину где стоит МОМ и вот что он мне сказал

                  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, но она меньше по размеру чем на моей. Ее наверно надо разрегистрировать добавить новую и зарегистрировать. Так?

                  Добавлено
                  да собственно не в машине дело. Скрипт не запускается на любой машине, мне кажется я просто неправильно создаю объекты

                  ExpandedWrap disabled
                    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 а можно пояснить, если не затруднит.
                        Цитата nil5 @
                        Set Matches = CreateObject("VBScript_RegExp_55.MatchCollection")
                        Set Match = CreateObject("VBScript_RegExp_55.Match")
                        Set SubMatch = CreateObject("VBScript_RegExp_55.SubMatches")


                        вот это не надо создавать. просто объяви переменные.
                          упростил скрипт до предела, вот весь его код

                          ExpandedWrap disabled
                            Option Explicit
                             
                            Set reg = CreateObject("VBScript_RegExp_55.RegExp")


                          но при запуске получаю следующие сообщение:
                          "Невозможно создание объекта контейнером ActiveX: 'VBScript_RegExp_55.RegExp'"
                            А если так:
                            ExpandedWrap disabled
                              Set reg = CreateObject("VBScript.RegExp")
                              ExpandedWrap disabled
                                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 этой библиотекой?
                                Цитата nil5 @
                                Теперь выскакивает следующая ошибка
                                "Недопустимое число аргументов или присвоение значения свойства"
                                и ссылается на Matches = reg.Execute(Inf)
                                Как я понял метод ругается на возвращаемое значение. Как дальше то с ним работать?
                                Попробуйте так:
                                ExpandedWrap disabled
                                  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)
                                0 пользователей читают эту тему (0 гостей и 0 скрытых пользователей)
                                0 пользователей:


                                Рейтинг@Mail.ru
                                [ Script execution time: 0,0778 ]   [ 16 queries used ]   [ Generated: 25.04.24, 01:22 GMT ]