VBS中InStrRev函数的第三个参数(Start)使用注意事项

VBS中InStrRev函数使用过不少,但是几乎没有用过第三个参数,今天才发现第三个参数的用法跟我想的不太一样。

文档中是这么描述InStrRev函数的:

代码如下:

返回某字符串在另一个字符串中出现的从结尾计起的位置。

InStrRev(string1, string2[, start[, compare]])
参数

string1
必选项。接受搜索的字符串表达式。
string2
必选项。被搜索的字符串表达式。
Start
可选项。数值表达式,用于设置每次搜索的开始位置。如果省略,则默认值为 -1,表示从最后一个字符的位置开始搜索。如果 start 包含 Null,则出现错误
compare
可选项。在计算子字符串时,指示要使用的比较类型的数值。如果省略,将执行二进制比较。有关数值,请参阅“设置”部分。

第三个参数用于设置每次搜索的开始位置。如果省略,则默认值为 -1,表示从最后一个字符的位置开始搜索。于是我想当然的认为如果不省略(假设为N),则表示从最后第N个字符的位置开始搜索。至于为什么会有这样的思维定势,可能是文档表述不清,也可能是受到了其他语言的影响。

看一个简单的脚本:

代码如下:

s = http://jb51.net

n = InStrRev(s, "jb51")
WScript.Echo n

n = InStrRev(s, "jb51", 2)
WScript.Echo n

第一次输出8,这没有问题;而第二次居然输出0,表示没有找到字符串jb51。问题在于第三个参数不是表示从最后第N个字符的位置开始搜索,而是从开始第N个字符开始搜索。

所以InStrRev(s, "jb51", 2)相当于InStrRev(Left(s, 2), "jb51"),当然是搜索不到的。

顺便说一下中文文档里对最后一个参数的描述是错误的:

compare 参数可以有以下值:

vbBinaryCompare 执行二进制比较。

vbDatabaseCompare 执行基于包含在数据库(在此数据库中执行比较)中的信息的比较。

正确的是vbBinaryCompare和vbTextCompare,所以尽量看英文文档,虽然其中的错误也不少。

(0)

相关推荐

  • VBS教程:函数-InStrRev 函数

    InStrRev 函数返回某字符串在另一个字符串中出现的从结尾计起的位置. InStrRev(string1, string2[, start[, compare]]) 参数string1 必选项.接受搜索的字符串表达式. string2 必选项.被搜索的字符串表达式. Start 可选项.数值表达式,用于设置每次搜索的开始位置.如果省略,则默认值为 -1,表示从最后一个字符的位置开始搜索.如果 start 包含 Null,则出现错误 compare 可选项.在计算子字符串时,指示要使用的比较类

  • VBS中InStrRev函数的第三个参数(Start)使用注意事项

    VBS中InStrRev函数使用过不少,但是几乎没有用过第三个参数,今天才发现第三个参数的用法跟我想的不太一样. 文档中是这么描述InStrRev函数的: 复制代码 代码如下: 返回某字符串在另一个字符串中出现的从结尾计起的位置. InStrRev(string1, string2[, start[, compare]]) 参数 string1 必选项.接受搜索的字符串表达式. string2 必选项.被搜索的字符串表达式. Start 可选项.数值表达式,用于设置每次搜索的开始位置.如果省略,

  • VBS中InputBox函数的返回值使用技巧

    如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中的内容.如果用户单击取消,则函数返回一个零长度字符串 (""). 这是参考手册对InputBox函数返回值的说明,简单而明了,还有必要专门写一篇文章来讨论?我知道你一定对标题不屑一顾,换成是我,我也一定会不屑一顾,如果我没有看到百度VBS吧里的一个帖子. 关于Inputbox 疑惑 ---------------------------- 如果用户单击确定或按下 ENTER,则 InputBox 函数返回文本框中

  • nodejs对express中next函数的一些理解

    最近公司在使用node做前后端分离,采用的web框架是express,所以对express框架进行了深入的了解,前段时间写了篇关于express路由的文章,但是在那篇文章中貌似少了一个很重要的内容,就是express的next,所以今天单独来说说express的next. 关于next主要从三点来进行说明: next的作用是什么? 我们应该在何时使用next? next的内部实现机制是什么? Next的作用 我们在定义express中间件函数的时候都会将第三个参数定义为next,这个next就是

  • dim函数第三个参数设置截取字符的长度问题

    dim函数的第三个参数,也就是截取字符的长度,我在设置这个的时候,出了些问题:response.write mid(up_address,a(i),a(i+1)-1) & "<br />"像我上面这样写的时候,它就会报错,提示无效的过程调用或参数, response.write mid(up_address,a(i),a(i+1)+1) & "<br />"但是当我把其中的a(i+1)-1改为a(i+1)+1时,就能执行了,a

  • python中open函数对文件处理的使用教程

    目录 1.open() 1.1 参数1 1.2 参数2 1.3 参数3 2.with open() as 3.open函数常用的方法 3.1 读 3.2 写 3.3 获取文件读写类型 3.4 指针移动 3.5 当前指针位置 3.6 truncate 总结 在python中使用open函数对文件进行处理. 1.open() python打开文件使用open()函数,返回一个指向文件的指针.该函数常用以下三个参数. 1.1 参数1 目标文件的路径+名字.最好使用r"路径"这种原始字符串写法

  • vue2.x中h函数(createElement)与vue3中的h函数详解

    目录 1. vue2.x的 h 函数(createElement) 2. vue3 h函数配置项 2.1 v-model实现(以下开始为官网实现) 2.2 v-on 2.3 事件修饰符 2.4 插槽 2.5 component 和 is 2.6 自定义指令 2.7 内置组件 2.8 渲染函数的返回值 2.9 JSX 总结 1. vue2.x的 h 函数(createElement) 使用方法及介绍:(参考官网提取) h函数第一个是标签名字 或者是组件名字,第二个参数是配置项,第三个参数是 inn

  • SqlServer2012中LEAD函数简单分析

    LEAD函数简单点说,就是把下一行的某列数据提取到当前行来显示,看示例更能解释清楚,先看测试用脚本 DECLARE @TestData TABLE( ID INT IDENTITY(1,1), Department VARCHAR(20), LastName VARCHAR(20), Rate FLOAT ) INSERT INTO @TestData(Department,LastName,Rate) SELECT 'Document Control','Arifin',17.7885 UNI

  • 详解addEventListener的三个参数之useCapture

    addEventListener 有三个参数:第一个参数表示事件名称(不含 on,如 "click"):第二个参数表示要接收事件处理的函数:第三个参数为 useCapture,本文就讲解它. 复制代码 代码如下: <div id="outDiv">   <div id="middleDiv">     <div id="inDiv">请在此点击鼠标.</div>   </d

  • addEventListener()第三个参数useCapture (Boolean)详细解析

    举例 <div id="div1">  <div id="div2">    <div id="div3">      <div id="div4">      </div>    </div>  </div></div> 如果在 d3 上点击鼠标,事件流是这样的: 捕获阶段 在 div1 处检测是否有 useCapture 为 t

  • MySQL复制问题的三个参数分析

    今天星期二,早上居然起晚了,上班迟到了,简直是...废话不多说,在昨天的文章中,我们提到了三个参数,分别是: slave_exec_mode参数: sql_slave_skip_counter=N参数; slave-skip-errors=N参数. 这三个参数都可以解决并行复制中的一些指定的错误,例如duplicate key 1062错误等,今天我们简单试验一下,这三个参数的区别: 01 sql_slave_skip_counter参数 这个参数的设置主要是为了跳过某些错误的"event&qu

随机推荐