标题: [问题求助] vbs include 问题 [打印本页]
作者: caspar 时间: 2012-11-22 17:31 标题: 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 Function
复制代码
但问题来了...include之后 调用这个函数...
例如- Dim arrMatches()
- arrMatches=GetMatches(patrn,str,mcount,smcount,true,true)
复制代码
就会提示类型不匹配...有高手知道这是为什么么...?
作者: zz100001 时间: 2012-11-22 18:04
高手告诉你,问题在于,你的学问太渊博了。。。。
不需要管变量类型,把太细节的东西扔掉就好了,你要写成- Dim arrMatches
- arrMatches=GetMatches(patrn,str,mcount,smcount,true,true)
复制代码
作者: czjt1234 时间: 2012-11-22 18:07
返回一个数组啊,不行吧
数组赋值不是这样赋的吧
我是新手啊,大概这么猜下,不确定
要不用join函数连接成一个字符串,返回后再处理?
作者: Demon 时间: 2012-11-22 18:10
高手教教我怎么include吧
作者: caspar 时间: 2012-11-22 18:39
回复 2# zz100001
不用ByRef的话 那要获取匹配数 只能通过全局变量了吧....- -!
作者: caspar 时间: 2012-11-22 18:40
回复 3# czjt1234
那样就更烦了...因为Matches的不确定性...后期处理字符串的时候太多种可能了....如果这样 不如直接每次New RegExp...
作者: caspar 时间: 2012-11-22 18:44
本帖最后由 caspar 于 2012-11-22 18:48 编辑
返回一个数组啊,不行吧
数组赋值不是这样赋的吧
我是新手啊,大概这么猜下,不确定
要不用join函 ...
czjt1234 发表于 2012-11-22 18:07
函数返回值可以有几种方式的...可以返回一个集合 数组 字串 或者通过定义ByRef在调用函数时候把变量指针传递给函数 在函数内处理时候 直接改变父程序的变量内容
又或者用一个更不好的方式...就是全局变量...但是这个比较蛋疼...尽量避免...
但是因为vb的语法不严谨...所以很多时候类型会很模糊...
作者: caspar 时间: 2012-11-22 18:46
高手教教我怎么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 Sub
复制代码
作者: caspar 时间: 2012-11-22 19:57
通过子程序 ByRef 数组解决了....
作者: czjt1234 时间: 2012-11-23 08:21
不明白,子函数Sub本来就可以调用的啊
跟 include ExecuteGlobal 有什么关系?
作者: CrLf 时间: 2012-11-23 09:39
回复 8# caspar
好办法…
目测 match 好像不能又 dim 又用在 for each 中
作者: caspar 时间: 2012-11-23 11:39
不明白,子函数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)
复制代码
传递数组指针过去 就能返回了....
作者: caspar 时间: 2012-11-23 11:40
回复 caspar
好办法…
目测 match 好像不能又 dim 又用在 for each 中
CrLf 发表于 2012-11-23 09:39
咕~~(╯﹏╰)b.....改改.....
作者: Demon 时间: 2012-11-23 11:51
把这个代码黏贴到程序里头 然后就能像C那样 include "程序"
可以自定义类 子程序 函数等....
caspar 发表于 2012-11-22 18:46
学习了。
欢迎光临 批处理之家 (http://bathome.net./) |
Powered by Discuz! 7.2 |