VBS中InStrRev函数的第三个参数(Start)使用注意事项 |
VBS中InStrRev函数使用过不少,但是几乎没有用过第三个参数,今天才发现第三个参数的用法跟我想的不太一样 。 文档中是这么描述InStrRev函数的: 复制代码 代码如下: 返回某字符串在另一个字符串中出现的从结尾计起的位置 。 InStrRev(string1, string2[, start[, compare]]) string1 第三个参数用于设置每次搜索的开始位置 。如果省略,则默认值为 -1,表示从最后一个字符的位置开始搜索 。于是我想当然的认为如果不省略(假设为N),则表示从最后第N个字符的位置开始搜索 。至于为什么会有这样的思维定势,可能是文档表述不清,也可能是受到了其他语言的影响 。 看一个简单的脚本: 复制代码 代码如下: s = http://jb51.net n = InStrRev(s, "jb51") n = InStrRev(s, "jb51", 2) 第一次输出8,这没有问题;而第二次居然输出0,表示没有找到字符串jb51 。问题在于第三个参数不是表示从最后第N个字符的位置开始搜索,而是从开始第N个字符开始搜索 。 所以InStrRev(s, "jb51", 2)相当于InStrRev(Left(s, 2), "jb51"),当然是搜索不到的 。 顺便说一下中文文档里对最后一个参数的描述是错误的: compare 参数可以有以下值: vbBinaryCompare 执行二进制比较 。 vbDatabaseCompare 执行基于包含在数据库(在此数据库中执行比较)中的信息的比较 。 正确的是vbBinaryCompare和vbTextCompare,所以尽量看英文文档,虽然其中的错误也不少 。 |