Dictionary 对象
vbs脚本经常用来从外面的源获得信息,例如从文本文件或者数据库文件。在这些信息获得之后,它将被存储到它的内存中,然后用脚本来更改它。例如将信息存储在一个变量中,或者存储在一个数组中。同样,这些信息可以存储在 Dictionary 对象中。Dictionary 就好象一个数组一样。不同的是,它用叫做键对(key-item pairs)来存储信息,而数组用数字值来存储。例如,一个一维的数组存储州的首府像下面这样:
0 - Olympia
1 - Salem
2 - Sacramento
于其相反,Dictionary 存储信息像如下的格式:
Washington – Olympia
Oregon - Salem
California - Sacramento
如果你的命令行只是要求输入一个参数,比如计算机名字,你可以用数组来完成这样的工作。但是,Dictionary 提供了比数组更加多的功能。特别指出的是,Dictionary 不要求一个脚本确定需要存储的元素的数目。在数组中,你必须确定数组的大小,或者当添加数据的时候重新变更数组的大小。知道每个值对应的 index。在 Dictionary 中,值可以通过 key 或者 item 自身来访问。 这样,当管理员用脚本从外部获得信息,比如获得计算机的名字,然后存储在内存中以备使用的时候,Dictionary 就成了一个理想的工具。
创建一个Dictionary
因为 Dictionary 是一个 COM 对象,你必须用其它的 COM 对象那样去初始化它。如下的代码创建一个 Dictionary 对象。
Set objDictionary = CreateObject("Scripting.Dictionary")
当创建完了一个 Dictionary 对象之后,你可以配置 Dictionary 的属性或者向其内部添加元素。
Configuring Dictionary Properties
Dictionary 只有一个配置的属性,CompareMode,它对于要添加哪个 KEY 或者不能添加哪个 KEY起着非常重要的作用。(检查 key 是否存在在 Dictionary 中也是十分重要的)默认的情况下,Dictionary 是被创建成二进制模式,基于 ASCII 的值。知道这个很重要,因为在 ASCII 中,大写和小写字符是不同的。在二进制中,如下的两个服务可以同时被添加进来:
alerter
ALERTER
换句话说,在二进制模式下,你可能因为大小写不同而添加进来很多个同样的 item。这样就难于搜索了。如果你想查找 Alerter 这个 KEY,你可能得到它不存在,因为没有和它大小写完全一样的值。这样你可能向一个 Dictionary 添加同样的 item。当一个 Dictionary 被配置成 text 模式的时候,大小写被认为是一样的,这样可以除去同样的 key,你的 Dictionary 如果存在 alerter 的话,你就不能向其中添加另外一个叫做 ALERTER 的 key。无论你搜索 alerter 还是 ALERTER,都会找到叫做 Alerter 的 key。
为了配置 Dictionary 的模式,首先创建一个 Dictionary 对象实例,然后配置它的属性为如下的值:
0-设置成为二进制模式,这个是默认选项。
1 – 设置成 text 模式。
下面的脚本设置 Dictionary 成 text 模式:
Const TextMode = 1
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.CompareMode = TextMode
在 Dictionary 有任何元素的时候,你不能更改 Dictionary 的 CompareMode 属性。这是因为,二进制允许大小写的区分,例如,如下的 keys 每个代表了不同 key,因为 Dictionary 是基于二进制格式的:
apple
Apple
APPLE
在 text 模式下,这些 keys 是一致的。如果你将这些元素存储在二进制格式,那么没有什么问题,但是存储在 text 模式下的时候,Dictionary 就突然之间有三个同样的 keys,它就会失败了。
如果你想配置 Dictionary 的模式,那么事先移走 Dictionary 中所有的元素。
在创建了 Dictionary 对象实例之后,你可以用 add 方法向 Dictionary 添加 key-item 对。Add方法需要两个参数,必须按照如下顺序并且用逗号分开:
Key name
Item value
下面的脚本创建了一个 Dictionary 对象,然后添加一些类似于表格 4.10 中的key-item 对。
Table 4.10 Sample Key-Item Pairs
Key Item
Printer 1 Printing
Printer 2Offline
Printer 3Printing
Listing 4.45 Adding Key-Item Pairs to a Dictionary
code:
Set objDictionary = CreateObject("Scripting.Dictionary")
objDictionary.Add "Printer 1", "Printing"
objDictionary.Add "Printer 2", "Offline"
objDictionary.Add "Printer 3", "Printing"
Dictionary 的 key 必须是唯一的。例如,如下的两个语句会产生一个运行的错误出来。在第一行被编译之后,叫做 printer 1 的 key 已经存在于 Dictionary 中了:
objDictionary.Add "Printer 1", "Printing"
objDictionary.Add "Printer 1", "Offline"