今天用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
调用方法:通过双击c.bat调用,c.bat代码如下:
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]脚本中的字典、动态数组、队列和堆栈的更多相关文章

  1. C语言中怎么求动态数组大小

    先来个简单的样例 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() keyword是求出 ...

  2. C++中new申请动态数组

    C++中数组分为静态数组和动态数组,静态数组必须确定数组的大小,不然编译错误:而动态数组大小可以不必固定,用多少申请多少.静态数组类于与我们去餐馆吃饭,餐馆会把菜做好.而动态数组类似于我们自己买菜做饭 ...

  3. shell脚本中向hive动态分区插入数据

    在hive上建表与普通分区表创建方法一样: CREATE TABLE `dwa_m_user_association_circle`( `device_number` string, `oppo_nu ...

  4. 如何在VBS脚本中显示“选择文件对话框”或“选择目录对话框”

    .选择文件[XP操作系统,不能用于Win2000或98],使用“UserAccounts.CommonDialog”对象向用户显示一个标准的“文件打开”对话框 Set objDialog = Crea ...

  5. c++中new分配动态数组

    变长一维数组     这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组.实现变长数组最简单的是变长一维数组,你可以这样做:  //文件名: array01.cpp ...

  6. shell脚本--字符串处理和动态数组

    Linux下的文本处理命令,以清晰的列分割数据为高效处理源: awk 的gsub函数可替换指定字符串 echo "<tr><td>col1</td>< ...

  7. vbs脚本实现自动打字祝福&搞笑

    脚本祝福礼物 概述 听说抖音上流行一种用代码做程序表白的东西,,,, 当然我也不是要表白,,,, 但是好像蛮有意思的,,,, 于是,又学了一下vbs脚本,做了几个很不错的祝福脚本,不懂代码的可以直接戳 ...

  8. iOS开发小技巧--字典和数组的中文输出

    一.在解析json数据的时候,得到的集合对象或者数组对象在用%@打印的时候回出现类似乱码的情况.如图: 在iOS中打印字典或者数组对象,系统会默认调用字典对象和数组对象的descriptionWith ...

  9. 工控随笔_18_西门子_WinCC的VBS脚本_07_变量作用域和传值、传址

    在vbs脚本中也存在和其他编程语言一样的概念,那就是变量的作用域,变量的作用域决 定在什么范围内可以访问. 同样的在vbs脚本中对于变量也有一个生命周期, 变量的生命周期决定了变量的存续时间 这个主要 ...

随机推荐

  1. 在此页上的ActiveX控件和本页上的其他部分的交互可能不安全,你想允许这种交互吗

    转自 http://www.cnblogs.com/zdxster/archive/2011/01/27/1945868.html 在EOS6的项目中,如果采用VC++开发的ActiveX,那么第一次 ...

  2. Chap6: question38 - 42

    38. 数字 k 在有序数组中出现的次数 二分查找:找出第一个 k 和最后一个 k . #include <iostream> using namespace std; int getFi ...

  3. 华为OJ题目:扑克牌大小

    题目描述: 扑克牌游戏大家应该都比较熟悉了,一副牌由54张组成,含3~A.2各4张,小王1张,大王1张.牌面从小到大用如下字符和字符串表示(其中,小写joker表示小王,大写JOKER表示大王):3  ...

  4. Battery Historian for windows环境搭建

    Battery Historian for windows环境搭建 简介:Battery historian是一款通过上传bugreport文件分析用户手机中App的电池耗电情况的工具. Batter ...

  5. IQ推理:P先生和Q先生

    P先生.Q先生具有足够的推理能力.这天,他们正在接受面试. 他们知道桌子的抽屉里有16张扑克牌:红桃 A Q 4黑桃 J 8 4 2 7 3草花 K Q 5 4 6方块 A 5约瀚教授从这16张牌中挑 ...

  6. Discuz开源论坛本地部署自动生成数据库

    这个版本可能比较有点老,但是万变不离其宗,再新的版本都是在已有的基础上更新的,所以掌握方法是最重要的! 先上几张安装成功后的图 (安装成功的论坛首页) (后台管理登录页) 下面说一下安装步骤 第一步: ...

  7. 解决box-flex不均等分的问题

    我想当你上手css3的时候后一定为他的强大而感到震惊,但是震惊之后带来的一定是苦恼,因为他太TM变态了! 我之所以这么说是因为我今天写box-flex的时候遇到了一个可以让我蛋碎的问题~~~ 首先,b ...

  8. skiplist

    §1 Skip List 介绍 Skip List是一种随机化的数据结构,基于并联的链表,其效率可比拟于二叉查找树(对于大多数操作需要O(log n)平均时间).基本上, 跳跃列表是对有序的链表增加上 ...

  9. TStringList TMemo Text与Add赋值的区别 Memo.Text赋值高度注意事项,不得不知的技巧。

    Memo.Text赋值高度注意事项,不得不知的技巧. list := TStringList.Create;  list.Text:= str:  list.Count; list.Clear;  l ...

  10. 由于httpClient调用导致的ESTABLISHED过多和 Connection rest by peer 异常

    问题描述: 生产环境突然之间出现了大量的Connection rest by peer.后来使用netstat -an | grep 服务端口号发现有大量来自A10服务器的ESTABLISHED连接, ...