[VBS]脚本中的字典、动态数组、队列和堆栈
今天用VBS脚本写了几个程序,用到了字典(Dictionary)、动态数组(ArrayList)、队列(Queue)和堆栈(Stack)。现在写篇Blog总结一下 :-)
1.编写环境
今天突发奇想下载了个gVim来写VBS脚本,我用的版本是7.4的
在写脚本前,需要在gVim的安装根目录下,找到文件“_vimrc”,在里面添加下面三行:
set number
set softtabstop=
set tabstop=
意思分别是“显示行号”、“按退格键一次删掉4个空格”和“设定Tab长度为4个字符”
这个设置类似于Linux系统下文件“.vimrc”的配置
2.字典:Scripting.Dictionary
VBS中的字典需要使用Scripting.Dictionary
脚本文件:a.vbs,包含字典的添加、删除、判断键是否存在、修改键、修改值、遍历、统计键值对个数
Option Explicit '建立字典
Dim Dict : Set Dict = CreateObject("Scripting.Dictionary") '添加键值对
Dict.Add "Key1", "Item1"
Dict.Add "Key2", "Item2"
Dict.Add "Key3", "Item3" '字典中键值对数量
WScript.Echo "字典中现有键值对数量: " & Dict.Count WScript.Echo '检查指定键是否存在
If Dict.Exists("Key1") Then
WScript.Echo "Key1 存在!"
Else
WScript.Echo "Key1 不存在!"
End If If Dict.Exists("Keyn") Then
WScript.Echo "Keyn 存在!"
Else
WScript.Echo "Keyn 不存在!"
End If WScript.Echo '遍历字典
Sub TraverseDict
Dim DictKeys, DictItems, Counter
DictKeys = Dict.Keys
DictItems = Dict.Items
For Counter = To Dict.Count -
WScript.Echo _
"键: " & DictKeys(Counter) & _
"值: " & DictItems(Counter)
Next
End Sub TraverseDict WScript.Echo '在一个键值对中,修改键或修改值
Dict.Key("Key2") = "Keyx"
Dict.Item("Key1") = "Itemx"
TraverseDict WScript.Echo '删除指定键
Dict.Remove("Key3")
TraverseDict WScript.Echo '删除全部键
Dict.RemoveAll
WScript.Echo "字典中现有键值对数量: " & Dict.Count
调用方法:通过双击a.bat调用,a.bat代码如下:
cscript a.vbs
pause
运行结果截图:

2.动态数组:System.Collections.ArrayList
VBS中的动态数组需要使用System.Collections.ArrayList
脚本文件:b.vbs,包含动态数组的添加元素、删除元素、遍历、统计元素个数、清空
Option Explicit '建立动态数组
Dim Arrl : Set Arrl = CreateObject("System.Collections.ArrayList") '添加元素
Arrl.Add "Element3"
Arrl.Add "Element2"
Arrl.Add "Element1" '查看动态数组中的元素数
WScript.Echo "动态数组中现有元素数量: " & Arrl.Count
WScript.Echo "动态数组容量: " & Arrl.Capacity WScript.Echo '遍历动态数组
Sub TraverseArrl
Dim Counter
For Counter = To Arrl.Count -
WScript.Echo Arrl(Counter)
Next
End Sub
TraverseArrl WScript.Echo '动态数组排序
Arrl.Sort
TraverseArrl WScript.Echo '删除指定元素
Arrl.Remove("Element1")
TraverseArrl WScript.Echo '清空全部元素
Arrl.Clear
WScript.Echo "动态数组中现有元素数量: " & Arrl.Count
WScript.Echo "动态数组容量: " & Arrl.Capacity
调用方法:通过双击b.bat调用,b.bat代码如下:
cscript b.vbs
pause
运行结果截图:

3.队列:System.Collections.Queue
VBS中的队列需要使用System.Collections.Queue
脚本文件:c.vbs,包含队列的添加元素(入队)、删除元素(出队)、遍历、统计元素个数、清空
1 Option Explicit
2
3 '建立队列
4 Dim Que : Set Que = CreateObject("System.Collections.Queue")
5
6 Que.EnQueue("Element1")
7 Que.EnQueue("Element2")
8 Que.EnQueue("Element3")
9
10 '查看队列中的元素数
11 WScript.Echo "队列中的元素数: " & Que.Count
12
13 WScript.Echo
14
15 '遍历队列
16 Sub TraverseQue
17 Dim ArrQue : ArrQue = Que.ToArray
18 Dim Counter
19 For Counter = 0 To UBound(ArrQue)
20 WScript.Echo ArrQue(Counter)
21 Next
22 End Sub
23 TraverseQue
24
25 WScript.Echo
26
27 '退出队列
28 WScript.Echo Que.DeQueue
29 WScript.Echo "---"
30 TraverseQue
31 WScript.Echo
32
33 '清空队列
34 Que.Clear
35 WScript.Echo "队列中的元素数: " & Que.Count
1 cscript c.vbs
2 pause

4.堆栈:System.Collections.Stack
VBS中的堆栈需要使用System.Collections.Stack
脚本文件:d.vbs,包含堆栈的添加元素(压栈)、删除元素(出栈)、遍历、统计元素个数、清空
Option Explicit '建立堆栈
Dim Stk : Set Stk = CreateObject("System.Collections.Stack") Stk.Push "Element1"
Stk.Push "Element2"
Stk.Push "Element3" '查看堆栈中的元素数
WScript.Echo "堆栈中的元素数: " & Stk.Count WScript.Echo '遍历堆栈
Sub TraverseStk
Dim ArrStk : ArrStk = Stk.ToArray
Dim Counter
For Counter = To UBound(ArrStk)
WScript.Echo ArrStk(Counter)
Next
End Sub
TraverseStk WScript.Echo '元素出栈
WScript.Echo Stk.Pop
WScript.Echo "---"
TraverseStk WScript.Echo '清空堆栈
Stk.Clear
WScript.Echo "堆栈中的元素数: " & Stk.Count
调用方法:通过双击d.bat调用,d.bat代码如下:
cscript d.vbs
pause
运行结果截图:

[VBS]脚本中的字典、动态数组、队列和堆栈的更多相关文章
- C语言中怎么求动态数组大小
先来个简单的样例 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() keyword是求出 ...
- C++中new申请动态数组
C++中数组分为静态数组和动态数组,静态数组必须确定数组的大小,不然编译错误:而动态数组大小可以不必固定,用多少申请多少.静态数组类于与我们去餐馆吃饭,餐馆会把菜做好.而动态数组类似于我们自己买菜做饭 ...
- shell脚本中向hive动态分区插入数据
在hive上建表与普通分区表创建方法一样: CREATE TABLE `dwa_m_user_association_circle`( `device_number` string, `oppo_nu ...
- 如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”
.选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框 Set objDialog = Crea ...
- c++中new分配动态数组
变长一维数组 这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组.实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.cpp ...
- shell脚本--字符串处理和动态数组
Linux下的文本处理命令,以清晰的列分割数据为高效处理源: awk 的gsub函数可替换指定字符串 echo "<tr><td>col1</td>< ...
- vbs脚本实现自动打字祝福&搞笑
脚本祝福礼物 概述 听说抖音上流行一种用代码做程序表白的东西,,,, 当然我也不是要表白,,,, 但是好像蛮有意思的,,,, 于是,又学了一下vbs脚本,做了几个很不错的祝福脚本,不懂代码的可以直接戳 ...
- iOS开发小技巧--字典和数组的中文输出
一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...
- 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址
在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...
随机推荐
- 一个简单的CORBA例子
因为对CORBA分析的需要,这里写一个简单的CORBA例子.从JDK1.2开始,JDK中集成了ORB的实现,本例子使用了JDK1.7,对于JDK1.2+应该都没有问题.这个例子实现一个简单的加减乘除的 ...
- 将表里的数据批量生成INSERT语句的存储过程
有时候,我们需要将某个表里的数据全部导出来,迁移到另一个相同结构的库中,这里可以采取一个简便的方法,通过一个存储过程批量导出数据并生成SQL语句,非常方便.存储过程如下: )) as begin de ...
- iScroll.js和Swiper.js联合使用时的插件冲突(滑动冲突)
上面的截图 ,是手机端的一个滑动刷新效果.用的是scroll.js插件. 每项中又有一个滑动,是左右滑动的用swiper.js插件,查看每个班级的信息. 当手从sw ...
- css学习笔记(6)
+++++++++++++++++ CSS HACK+++++++++++++++++IE6.0 能识别 _background:#ff00ff; *background:#ff00ff; +back ...
- UNIX网络编程-send、recv、sendto、recvfrom详解
send.recv和sendto.recvfrom,一般情况下,send.recv在TCP协议下使用,sendto.recvfrom在UDP协议下使用,也可以在TCP协议下使用,不过用的很少. 1.s ...
- (转载)SQL Server 2005 如何启用xp_cmdshell组件
原文地址:http://www.cnblogs.com/atree/p/SQL_SERVER_xp_cmdshell.html [错误描述]: SQL Server阻止了对组件‘xp_cmdshell ...
- 解决Windows8下Cisco Systems VPN Client的Reason 442: Failed to Enable Virtual Adapter错误
Windows8下使用Cisco Systems VPN Client创建的Cisco IPSec VPN无法连接,提示Reason 442: Failed to Enable Virtual Ada ...
- Squid服务日志分析
Squid服务日志分析 Apache 和 Squid 是两种著名的代理缓存软件,但Squid 较 Apache 而言是专门的代理缓存服务器软件,其代理缓存的功能强大,支持 HTTP/1.1 协议,其缓 ...
- [转载]: delphi中XLSReadWrite控件的使用(3)---基本应用
这是自带的一个例子,看懂这一点东西,基本的操作应该没问题了.... unit Main; interface uses Windows, Messages, SysUtils, Variants, C ...
- NHibernate系列文章九:NHibernate对象二级缓存上
摘要 NHibernate的二级缓存由SessionFactory管理,由所有Session共享. NHibernate缓存读取顺序: 首先从一级缓存中读取,如果一级缓存对象存在,则读取一级缓存对象并 ...