[VBS]脚本中的字典、动态数组、队列和堆栈

今天用VBS脚本写了几个程序,用到了字典(Dictionary)、动态数组(ArrayList)、队列(Queue)和堆栈(Stack)。现在写篇Blog总结一下 :-)

1.编写环境

今天突发奇想下载了个gVim来写VBS脚本,我用的版本是7.4的

在写脚本前,需要在gVim的安装根目录下,找到文件“_vimrc”,在里面添加下面三行:

set number
set softtabstop=4
set tabstop=4

意思分别是“显示行号”、“按退格键一次删掉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 = 0 To Dict.Count - 1
        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代码如下:

1 cscript a.vbs
2 pause

运行结果截图:

2.动态数组:System.Collections.ArrayList

VBS中的动态数组需要使用System.Collections.ArrayList

脚本文件:b.vbs,包含动态数组的添加元素、删除元素、遍历、统计元素个数、清空

 1 Option Explicit
 2
 3 ‘建立动态数组
 4 Dim Arrl : Set Arrl = CreateObject("System.Collections.ArrayList")
 5
 6 ‘添加元素
 7 Arrl.Add "Element3"
 8 Arrl.Add "Element2"
 9 Arrl.Add "Element1"
10
11 ‘查看动态数组中的元素数
12 WScript.Echo "动态数组中现有元素数量: " & Arrl.Count
13 WScript.Echo "动态数组容量: " & Arrl.Capacity
14
15 WScript.Echo
16
17 ‘遍历动态数组
18 Sub TraverseArrl
19     Dim Counter
20     For Counter = 0 To Arrl.Count - 1
21         WScript.Echo Arrl(Counter)
22     Next
23 End Sub
24 TraverseArrl
25
26 WScript.Echo
27
28 ‘动态数组排序
29 Arrl.Sort
30 TraverseArrl
31
32 WScript.Echo
33
34 ‘删除指定元素
35 Arrl.Remove("Element1")
36 TraverseArrl
37
38 WScript.Echo
39
40 ‘清空全部元素
41 Arrl.Clear
42 WScript.Echo "动态数组中现有元素数量: " & Arrl.Count
43 WScript.Echo "动态数组容量: " & Arrl.Capacity

调用方法:通过双击b.bat调用,b.bat代码如下:

1 cscript b.vbs
2 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,包含堆栈的添加元素(压栈)、删除元素(出栈)、遍历、统计元素个数、清空

 1 Option Explicit
 2
 3 ‘建立堆栈
 4 Dim Stk : Set Stk = CreateObject("System.Collections.Stack")
 5
 6 Stk.Push "Element1"
 7 Stk.Push "Element2"
 8 Stk.Push "Element3"
 9
10 ‘查看堆栈中的元素数
11 WScript.Echo "堆栈中的元素数: " & Stk.Count
12
13 WScript.Echo
14
15 ‘遍历堆栈
16 Sub TraverseStk
17     Dim ArrStk : ArrStk = Stk.ToArray
18     Dim Counter
19     For Counter = 0 To UBound(ArrStk)
20         WScript.Echo ArrStk(Counter)
21     Next
22 End Sub
23 TraverseStk
24
25 WScript.Echo
26
27 ‘元素出栈
28 WScript.Echo Stk.Pop
29 WScript.Echo "---"
30 TraverseStk
31
32 WScript.Echo
33
34 ‘清空堆栈
35 Stk.Clear
36 WScript.Echo "堆栈中的元素数: " & Stk.Count

调用方法:通过双击d.bat调用,d.bat代码如下:

1 cscript d.vbs
2 pause

运行结果截图:

时间: 2024-10-30 15:48:04

[VBS]脚本中的字典、动态数组、队列和堆栈的相关文章

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

先来个简单的例子 int a[] = {1,2,3}; int arr_len = 0; arr_len = sizeof(a)/sizeof(int); 解释:sizeof() 关键字是求出对象所占用的内存空间的大小,so, sizeof(a)是算出整个数组占用的空间的大小. 因为是整数数组,一个整数在32位系统上占用4个字节,不同的系统数值可能不同, 用sizeof(int)可以计算出 一个整数占用的内存空间大小.所以用sizeof(a)/sizeof(int)数组中有几个整数,也即算出了数

Shell脚本中的函数、数组

Shell脚本中的函数 Shell脚本中的数组 原文地址:http://blog.51cto.com/13515599/2107416

java中如何实现动态数组的创建与赋值

最近,项目中需要实现:提取一组数据,每个数组都有自己的属性,这组数据的长度又未知,还可能变长,变短,我考虑一会,实现如下: 1.在oncreate前面,我声明两个数组 String  data1[ ][ ]://使用的时候,比如和adapter关联 String  data2[ ][ ]://提取数据,我这里是Poisaerh出来的数据 2.实例化数组,提取数据,判断二维数据的维数个数,比如我这里得知,有五个数据,每个数据有五个属性 data2 = new String[5][5]; //实例化

c++中new分配动态数组

变长一维数组     这里说的变长数组是指在编译时不能确定数组长度,程序在运行时需要动态分配内存空间的数组.实现变长数组最简单的是变长一维数组,你可以这样做: //文件名: array01.cpp #include<iostream> using namespace std; int main() { int len; cin>>len; //用指针p指向new动态分配的长度为len*sizeof(int)的内存空间 int *p=new int[len]; ...........

WEB开发教程--ASP中静态数组与动态数组的用法

在ASP中,数组是具有相同名字的一组变量,数组中包含多个元素,由不同的下标值区分数组的各个元素.在VBScript中,数组有两种类型:静态数组和动态数组. 1.静态数组 静态数组在编译时开辟内存区,数组大小在运行时不可改变. 定义一个一维数组mmArray(3) Dim mmArray(3) mmArray(0)=1 mmArray(1)=3 mmArray(2)=5 mmArray(3)=7 其中mmArray是数组名,数组的下界为0,上界为3,数组元素从mmArray(0)到mmArray(

int[]里数的个数怎么由输入决定?-----动态数组。

java中如何创建动态数组?(摘自百度知道) Java动态数组是一种可以任意伸缩数组长度的对象,在Java中比较常用的是ArrayList,ArrayList是javaAPI中自带的java.util.ArrayList.下面介绍一下ArrayList作为Java动态数组的创建以及用法. 1.语法:add()是添加一个新的元素,remove()删除一个元素,size()获得ArrayList的长度.ArrayList的下标是从0开始.2.示例代码import java.util.ArrayLis

VBS脚本完美实现开机延时启动

目录 概述 vbs内容示例: vbs示例语句分析 自定义vbs脚本 一些问题和解决方法 概述 系统开机时,顺带自动启动了不少驱动程序,使得电脑开机后鼠标要呆滞许久.为了加快windows的开机速度,在参考网上不少大牛的资料后,整理出使用vbs脚本利实现开机后延时启动程序的方法 vbs内容示例: #1 Dim delayer #2 Set delayer = CreateObject("WScript.Shell") #3 WScript.sleep 8000 #4 delayer.Ru

Vbs脚本执行不同版本的Office激活任务(MAK激活)

我们都知道微软部分产品可以使用不同的激活方式,对于企业内部的用户来说,会针对Office和windows os部署对应的kms服务进行激活,但是对于但是对于企业外部的用户来说,一般使用mak的激活方式,MAK的key是有数量限制的,用一个会少一个,所以我们建议少用,当然有人会说,将kms服务器的1688发布到外网不就可以对于外部的用户使用了么,这么敏感的信息发布到外网肯定不好,所以一般会使用Mak激活方式,使用mak的话,我们不能给用户远程来输入key,所以只能通过对应的vbs程序让用户自己执行

使用new来创建动态数组

原文来自:http://book.51cto.com/art/201211/367161.htm 使用new来创建动态数组(1) 如果程序只需要一个值,则可能会声明一个简单变量,因为对于管理一个小型数据对象来说,这样做比使用new和指针更简单,尽管给人留下的印象不那么深刻.通常,对于大型数据(如数组.字符串和结构),应使用new,这正是new的用武之地.例如,假设要编写一个程序,它是否需要数组取决于运行时用户提供的信息.如果通过声明来创建数组,则在程序被编译时将为它分配内存空间.不管程序最终是否