VBS For Next循环的一些细节

For Next 语句的基本结构为:


代码如下:

For counter = start To end [Step step]
[statements]
[Exit For]
[statements]
Next

当 For Next 循环开始时,Visual Basic Scripting Edition (VBScript) 将 start 赋值给 counter。在运行循环中的语句块之前,将 counter 与 end 进行比较。如果 counter 已经超过了 end 的值,那么 For 循环终止,控制流程跳跃到 Next 之后的语句。否则运行循环中的语句块。

每次 VBScript 遇到 Next 的时候,它将 counter 增加 step 并返回到 For。它再次比较 counter 和 end 的值,并根据结果继续运行循环中的语句块或者终止循环。这个过程将一直进行下去,直到 counter 超过了 end 或者遇到了 Exit For 语句。

以上为常识,简单的提一下来凑字数,下面是一个你可能忽略掉的细节:

循环控制变量 start end 和 step 仅仅在循环开始前求值一次,如果你在循环中的语句块改变 end 或者 step 的值,这个改变不会影响到循环的运行。

写个简单的 VBS 脚本验证一下:


代码如下:

'Author: Demon
'Date: 2012-1-19
n = 10
s = 1
For i = 1 To n Step s
WScript.Echo i
n = 5
s = 2
Next
WScript.Echo n, s

我们在循环中改变了 n 和 s 的值,但是循环仍然进行了10次,依次输出1到10,说明 For Next 循环内部保存有循环控制变量 n 和 s 的一份拷贝,并以此内部变量来控制循环的流程。

了解这个细节有助于我们写出高效简洁的代码:


代码如下:

'Author: Demon
'Date: 2012-1-19
s = "http://jb51.net"
For i = 1 To Len(s)
WScript.Echo Mid(s, i, 1)
Next

'这种 C Style 的写法并不比上面效率更高
'在 VBS 的 For Next 循环中不需要这么做
l = Len(s)
For i = 1 To l
WScript.Echo Mid(s, i, 1)
Next

值得注意的是,在循环中改变 counter 是允许的,但是你应该避免这么做,这样只会使你的脚本难以阅读和调试。


代码如下:

'Author: Demon
'Date: 2012-1-19
For i = 1 To 10
WScript.Echo i
i = i + 2 '不提倡这么做
Next

参考链接:http://msdn.microsoft.com/en-us/library/sa3hh43e%28v=vs.85%29.aspx

原文:http://demon.tw/programming/vbs-for-next.html

(0)

相关推荐

  • VBS For Next循环的陷阱分享

    昨天写<QWERTY密码:加密与解密>的时候,为了得到26个字母的字符串,写了这样一个 For Next 循环: 复制代码 代码如下: 'Author: Demon 'Website: http://demon.tw 'Date: 2012/2/10 For i = 65 To (i + 25) s = s & Chr(i) Next WScript.Echo s 运行后却发现没有字符串输出,觉得很奇怪,于是简单修改了一下: 复制代码 代码如下: 'Author: Demon 'Web

  • VBS For Next循环的一些细节

    For Next 语句的基本结构为: 复制代码 代码如下: For counter = start To end [Step step] [statements] [Exit For] [statements] Next 当 For Next 循环开始时,Visual Basic Scripting Edition (VBScript) 将 start 赋值给 counter.在运行循环中的语句块之前,将 counter 与 end 进行比较.如果 counter 已经超过了 end 的值,那么

  • 用vbs实现文本循环读取

    因为测试中需要读取一批URL数据进行浏览,其实使用QTP本身的table能实现多种读取方式,但是因为需要tabel是使用excel保存的,在没有安装excel的机器或者vsita机器上运行该部分脚本会遇到问题,为了不必要的麻烦,因而使用txt保存网址数据. 但是vbs好像没有提供设置文件读取位置的函数(python提供),网上没有找到这块可用的代码,可能大家基本没有我这么低级的需求吧囧rz--,后来还是搞定了,所以将代码贴出来,以作备忘.其实核心就是发现读取到文本的最后一行,那么重新打开该文件即

  • vbs脚本 加密 几个小细节小结下

    复制代码 代码如下: dxy:      你好!      我学vbs也有一小段时间了,最近看到一本书上讲vbs脚本的加密,就自己试了试,可是有一点问题,低级的语法错误我都自己修正了,可脚本运行后不起作用.所以想请教你一下.脚本的原理是这样的:它把代码转换成16进制,然后再写个解密代码,通过这个解密来执行加密的代码,将字符串成16进制的代码如下:  Function str2hex (Byval strHex)  For i=1 to Len(strHex)  sHex = sHex & Hex

  • Linux shell编程中IO和条件及循环处理的细节问题讨论

    > 與 < 差在哪? 谈到I/O redirection,不妨先让我们认识一下File Descriptor(FD).程序的运算,在大部份情况下都是进行数据(data)的处理,这些数据从哪读进?又,送出到哪里呢?这就是File descriptor(FD)的功用了. 在shell程序中,最常使用的FD大概有三个,分别为: 0: Standard Input(STDIN) 1: Standard Output(STDOUT) 2: Standard Error Output(STDERR) 在标

  • VBS基础篇 - 循环(for、Do、While)

    经常地,当编写代码时,我们希望将一段代码执行若干次,我们可以在代码中使用循环语句来完成这项工作. 循环可分为三类:一类在条件变为 False 之前重复执行语句,一类在条件变为 True 之前重复执行语句,另一类按照指定的次数重复执行语句. For...Next:指定循环次数,使用计数器重复运行语句 Do...Loop:当条件为 true 或者直到条件为 true 时,运行循环 While-Wend:当条件为True时循环 For Each...Next:对于集合中的每项或数组中的每个元素,重复执

  • Java for-each循环使用难题2例(高级使用方法)

    Java中,for-each循环简化了任何Collection或array的遍历过程,但并不是每个Java程序员都了解本文将要描述的for-each 循环的一些细节.与 Java5 发布的其他术语:释放别名泛型,自动封装和可变参数不同,Java开发者对for-each循环的使用比任何其他特性更加频繁,但当问及高级的for-each循环怎样工作,或什么是在for-each循环中使用Collection时的基本需求时,就不是每个人都能够回答的了. 本篇教程和例子旨在通过深入研究for-each 循环

  • 跟我学习javascript的循环

    1.优先使用数组而不是Object类型来表示有顺序的集合 ECMAScript标准并没有规定对JavaScript的Object类型中的属性的存储顺序. 但是在使用for..in循环对Object中的属性进行遍历的时候,确实是需要依赖于某种顺序的.正因为ECMAScript没有对这个顺序进行明确地规范,所以每个JavaScript执行引擎都能够根据自身的特点进行实现,那么在不同的执行环境中就不能保证for..in循环的行为一致性了. 比如,以下代码在调用report方法时的结果就是不确定的: f

  • jquery实现的3D旋转木马特效代码分享

    本文实例讲述了jquery实现的3D旋转木马特效.分享给大家供大家参考.具体如下: 这是一款基于jquery实现的3D旋转木马特效代码,适合用于产品展示,便于用户循环浏览产品细节,是一款非常实用的特效代码. 运行效果图:----------------------查看效果 下载源码----------------------- 小提示:浏览器中如果不能正常运行,可以尝试切换浏览模式. 为大家分享的jquery实现的3D旋转木马特效代码如下 <head> <meta http-equiv=

  • VBS教程:VBScript 基础-使用循环语句

    使用循环语句循环用于重复执行一组语句.循环可分为三类:一类在条件变为 False 之前重复执行语句,一类在条件变为 True 之前重复执行语句,另一类按照指定的次数重复执行语句. 在 VBScript 中可使用下列循环语句: Do...Loop: 当(或直到)条件为 True 时循环. While...Wend: 当条件为 True 时循环. For...Next: 指定循环次数,使用计数器重复运行语句. For Each...Next:对于集合中的每项或数组中的每个元素,重复执行一组语句.(

随机推荐