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

1.编写环境

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

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

  1. set number
  2. set softtabstop=
  3. set tabstop=

意思分别是“显示行号”、“按退格键一次删掉4个空格”和“设定Tab长度为4个字符”

这个设置类似于Linux系统下文件“.vimrc”的配置

2.字典:Scripting.Dictionary

VBS中的字典需要使用Scripting.Dictionary

脚本文件:a.vbs,包含字典的添加、删除、判断键是否存在、修改键、修改值、遍历、统计键值对个数

  1. Option Explicit
  2.  
  3. '建立字典
  4. Dim Dict : Set Dict = CreateObject("Scripting.Dictionary")
  5.  
  6. '添加键值对
  7. Dict.Add "Key1", "Item1"
  8. Dict.Add "Key2", "Item2"
  9. Dict.Add "Key3", "Item3"
  10.  
  11. '字典中键值对数量
  12. WScript.Echo "字典中现有键值对数量: " & Dict.Count
  13.  
  14. WScript.Echo
  15.  
  16. '检查指定键是否存在
  17. If Dict.Exists("Key1") Then
  18. WScript.Echo "Key1 存在!"
  19. Else
  20. WScript.Echo "Key1 不存在!"
  21. End If
  22.  
  23. If Dict.Exists("Keyn") Then
  24. WScript.Echo "Keyn 存在!"
  25. Else
  26. WScript.Echo "Keyn 不存在!"
  27. End If
  28.  
  29. WScript.Echo
  30.  
  31. '遍历字典
  32. Sub TraverseDict
  33. Dim DictKeys, DictItems, Counter
  34. DictKeys = Dict.Keys
  35. DictItems = Dict.Items
  36. For Counter = To Dict.Count -
  37. WScript.Echo _
  38. "键: " & DictKeys(Counter) & _
  39. "值: " & DictItems(Counter)
  40. Next
  41. End Sub
  42.  
  43. TraverseDict
  44.  
  45. WScript.Echo
  46.  
  47. '在一个键值对中,修改键或修改值
  48. Dict.Key("Key2") = "Keyx"
  49. Dict.Item("Key1") = "Itemx"
  50. TraverseDict
  51.  
  52. WScript.Echo
  53.  
  54. '删除指定键
  55. Dict.Remove("Key3")
  56. TraverseDict
  57.  
  58. WScript.Echo
  59.  
  60. '删除全部键
  61. Dict.RemoveAll
  62. 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 = To Arrl.Count -
  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. 1 Option Explicit
  2. 2
  3. 3 '建立队列
  4. 4 Dim Que : Set Que = CreateObject("System.Collections.Queue")
  5. 5
  6. 6 Que.EnQueue("Element1")
  7. 7 Que.EnQueue("Element2")
  8. 8 Que.EnQueue("Element3")
  9. 9
  10. 10 '查看队列中的元素数
  11. 11 WScript.Echo "队列中的元素数: " & Que.Count
  12. 12
  13. 13 WScript.Echo
  14. 14
  15. 15 '遍历队列
  16. 16 Sub TraverseQue
  17. 17 Dim ArrQue : ArrQue = Que.ToArray
  18. 18 Dim Counter
  19. 19 For Counter = 0 To UBound(ArrQue)
  20. 20 WScript.Echo ArrQue(Counter)
  21. 21 Next
  22. 22 End Sub
  23. 23 TraverseQue
  24. 24
  25. 25 WScript.Echo
  26. 26
  27. 27 '退出队列
  28. 28 WScript.Echo Que.DeQueue
  29. 29 WScript.Echo "---"
  30. 30 TraverseQue
  31. 31 WScript.Echo
  32. 32
  33. 33 '清空队列
  34. 34 Que.Clear
  35. 35 WScript.Echo "队列中的元素数: " & Que.Count
调用方法:通过双击c.bat调用,c.bat代码如下:
  1. 1 cscript c.vbs
  2. 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 = 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

运行结果截图:

[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. Mysql备份迁移——MySqlBackup(.net)——(无法解决视图嵌视图报错)

    这里是利用MySqlBackup,可以再nuget中下载. 无法解决视图嵌视图报错的问题,只导表跟数据比较合适,如果有视图嵌视图,请参照Mysql备份迁移——Mysqldump(.NET调用Mysql ...

  2. java几种常见加密算法小试

    http://www.cnblogs.com/JCSU/articles/2803598.html http://www.open-open.com/lib/view/open139727425732 ...

  3. IDEA新建javaWeb以及Servlet简单实现

    刚开始用IDEA开发,还不太熟悉,因此写一个教程,加深印象 1.新建一个Web项目 两种方法:java 和 Java Enterprise(推荐) 第一种)通过Java工程创建,这个方法需要手动导入T ...

  4. [EventBus源码解析] 订阅者处理消息的四种ThreadMode

    前言 在前面,我们探讨了如何在自己的代码中引入EventBus,进行基本的事件分发/监听:对注册观察者与事件发送的过程进行了浅析.从之前的学习中,我们了解到,EventBus一共有4种onEvent方 ...

  5. 稍览了一下CommonJS

    CommonJS是服务器端模块的规范,现在炒得很火的Node.js采用了这个规范. 根据CommonJS规范,一个单独的文件就是一个模块.加载模块使用require方法,该方法读取一个文件并执行,最后 ...

  6. Selenium + PhantomJS + python 简单实现爬虫的功能

    Selenium 一.简介 selenium是一个用于Web应用自动化程序测试的工具,测试直接运行在浏览器中,就像真正的用户在操作一样 selenium2支持通过驱动真实浏览器(FirfoxDrive ...

  7. net.sf.json 时间格式的转化

    后台代码 //后台代码 response.setCharacterEncoding("UTF-8"); JsonConfig jsonConfig = new JsonConfig ...

  8. JS实现转动效果

    方案一 <div class="div_uploading"> <div class="div_uploading_scroll">&l ...

  9. Visual paradigm Db Archtecture Database config

  10. 【Linux】netdata监控组件

    github:https://github.com/firehol/netdata 安装:https://github.com/firehol/netdata/wiki/Installation 内存 ...