返回列表 发帖

[问题求助] vbs include 问题

本帖最后由 caspar 于 2012-11-22 17:32 编辑

本来vbs是不能像C那样 include 但是通过ExecuteGlobal 就能实现调用自定义类和函数

但是一些奇怪的问题就来了...

因为要多次调用正则来获取文字, 自身懒, 想写少点代码, 就写了一个RegExp的Function 那以后要再用到的时候 直接include
RegExp的代码:
Public Function GetMatches(ByVal patrn, ByVal strng, ByRef MatchesCount, ByRef SubMatchesCount, ByVal regExIgnoreCase, ByVal regExGlobal)
    Dim regEx, Match, Matches            ' 建立变量。
    Dim arrMatch()
    Set regEx = New RegExp               ' 建立正则表达式。
    regEx.Pattern = patrn                ' 设置模式。
    IF regExIgnoreCase="" Then           ' 设置不区分字符大小写。
       regEx.IgnoreCase = True   
    ELSE
       regEx.IgnoreCase = regExIgnoreCase
    End IF                          
    IF regExGlobal="" Then
       regEx.Global = True
    ELSE
       regEx.Global = regExGlobal
    End IF                               ' 设置全局可用性。
   
    Set Matches = regEx.Execute(strng)   ' 执行搜索。
   
    MatchesCount=Matches.Count           ' 获取匹配数量
    SubMatchesCount=Matches(0).SubMatches.Count
    ReDim arrMatch(MatchesCount)
    ReDim arrMatch(Matches.count,SubMatchesCount)
    n=1     
    For Each Match in Matches           ' 遍历匹配集合。
        arrMatch(n,0)=Match.Value
        For t=1 to Match.SubMatches.Count
            arrMatch(n,t)=Match.submatches(t-1)
        next
        n=n+1
     Next
     
     Set regEx = Nothing
     GetMatches = arrMatch             ' 返回匹配矩阵
End FunctionCOPY
但问题来了...include之后 调用这个函数...
例如
Dim arrMatches()
arrMatches=GetMatches(patrn,str,mcount,smcount,true,true)COPY
就会提示类型不匹配...有高手知道这是为什么么...?

高手告诉你,问题在于,你的学问太渊博了。。。。
不需要管变量类型,把太细节的东西扔掉就好了,你要写成
Dim arrMatches
arrMatches=GetMatches(patrn,str,mcount,smcount,true,true)COPY

TOP

返回一个数组啊,不行吧

数组赋值不是这样赋的吧

我是新手啊,大概这么猜下,不确定

要不用join函数连接成一个字符串,返回后再处理?

QQ 20147578

TOP

高手教教我怎么include吧

TOP

回复 2# zz100001


  不用ByRef的话 那要获取匹配数 只能通过全局变量了吧....- -!

TOP

回复 3# czjt1234


    那样就更烦了...因为Matches的不确定性...后期处理字符串的时候太多种可能了....如果这样 不如直接每次New RegExp...

TOP

本帖最后由 caspar 于 2012-11-22 18:48 编辑
返回一个数组啊,不行吧

数组赋值不是这样赋的吧

我是新手啊,大概这么猜下,不确定

要不用join函 ...
czjt1234 发表于 2012-11-22 18:07



    函数返回值可以有几种方式的...可以返回一个集合 数组 字串 或者通过定义ByRef在调用函数时候把变量指针传递给函数 在函数内处理时候 直接改变父程序的变量内容
   又或者用一个更不好的方式...就是全局变量...但是这个比较蛋疼...尽量避免...

   但是因为vb的语法不严谨...所以很多时候类型会很模糊...

TOP

高手教教我怎么include吧
Demon 发表于 2012-11-22 18:10


把这个代码黏贴到程序里头 然后就能像C那样 include "程序"
可以自定义类 子程序 函数等....
Sub Include(sInstFile)
    On Error Resume Next
    Dim oFSO, f, s
    Set oFSO = CreateObject("Scripting.FileSystemObject")
    If oFSO.FileExists(sInstFile) Then
        Set f = oFSO.OpenTextFile(sInstFile)
        s = f.ReadAll
        f.Close
        ExecuteGlobal s
    End If
    Set oFSO = Nothing
    Set f = Nothing
End SubCOPY

TOP

通过子程序 ByRef 数组解决了....

TOP

不明白,子函数Sub本来就可以调用的啊

跟 include ExecuteGlobal 有什么关系?

QQ 20147578

TOP

回复 8# caspar


    好办法…
目测 match 好像不能又 dim 又用在 for each 中

TOP

不明白,子函数Sub本来就可以调用的啊

跟 include ExecuteGlobal 有什么关系?
czjt1234 发表于 2012-11-23 08:21



    很是神奇.... 现在改成
Public Sub GetMatches(ByRef arrMatch(), ByRef patrn, ByVal strng, ByRef MatchesCount, ByRef SubMatchesCount, ByVal regExIgnoreCase, ByVal regExGlobal)COPY
传递数组指针过去 就能返回了....

TOP

回复  caspar


    好办法…
目测 match 好像不能又 dim 又用在 for each 中
CrLf 发表于 2012-11-23 09:39



    咕~~(╯﹏╰)b.....改改.....

TOP

把这个代码黏贴到程序里头 然后就能像C那样 include "程序"
可以自定义类 子程序 函数等....
caspar 发表于 2012-11-22 18:46



    学习了。

TOP

返回列表