热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

过新年,特献薄礼:用VBScript实现的集合类!

特需要使用集合的时候,无法找到VBScript中的Collection对象;到处找不到,那就自己写一个吧!注:1.需要VBScript5.0或更高版本,使用Class及
特需要使用集合的时候,无法找到 Vbscript 中的 Collection 对象;到处找不到,那就自己写一个吧!

注:
1. 需要 Vbscript 5.0 或更高版本,使用 Class 及动态数组实现;
2. 如果哪位高人能够提供更好的方法,不要忘了回贴告诉在下啊!

下面为源码:
===================================
' Filename: CollCls.vbs - 集合类定义(模拟集合行为)
' Programmer: zhang_resource
' Built: 2004-01-12
' Last Edited: 2004-01-13
' (c) All Rights Reserved.

' 关于集合类:
' 1. 索引从 1 开始到 Count
' 2. 不支持默认项的语法 objColl("Key"), 只支持 objColl.Item("Key") 的语法
' 3. 提供以下外部方法:
'  - Add() 支持错误捕获
'  - Remove() 支持错误捕获
'  - Item() 支持错误捕获
'  - Count()
'  - Clear()

' 注解:
' 1. Class 的支持自 Vbscript 5.0 开始,包含在 IE5.0(浏览器)、IIS4.0(服务器)及其后续版本中
' 2. 本模块仅用于客户端(IE 浏览器)
'    IE 客户端引用:
'      <SCRIPT language="Vbscript" src="CollCls.vbs">
'      

Class clsCollection
' --- Private ---

' 以下 2 个数组用以保存集合元素及其健值 Key 索引,
' 具有相同的数组维数及下标
Private m_ItemArray() ' 用以保存集合元素的数组,可为任意类型的数据
Private m_KeyArray() ' 用以保存集合元素 Key 值的数组,其值为字符串
Private m_Count ' 集合元素的个数

Private Sub Class_Initialize() ' 类初始化
m_Count = 0
ReDim m_ItemArray(0) ' 第 0 个元素将不起作用
ReDim m_KeyArray(0) ' 第 0 个元素将不起作用
End Sub

' --- Public ---

'''''''''''''''''''''''''''''''''''''''''''''''''''''
'' Add() Method
'' Item_Key: 关键字Key[字符串],不能重复,不区分大小写
'' Item_Value: 集合元素的值,任意类型
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function Add(Item_Key, Item_Value)
Dim i

' 判断加入的元素是否与原来相同
If m_Count > 0 Then
If VarType(m_ItemArray(m_Count)) <> VarType(Item_Value) Then
Add = Null
Err.Raise 111, "CollCls:第53行", "加入的新元素与集合中的元素类型不一致。"
Exit Function
End If
End If

' 判断关键字是否有重复
For i = 1 To m_Count
If LCase(m_KeyArray(i)) = LCase(Item_Key) Then
Add = Null
Err.Raise 222, "CollCls:第62行", "新元素的关键字与原有关键字冲突。"
Exit Function
End If
Next

' 添加到数组中
m_Count = m_Count + 1

ReDim Preserve m_ItemArray(m_Count)
ReDim Preserve m_KeyArray(m_Count)

m_KeyArray(m_Count) = Item_Key

If IsObject(Item_Value) = True Then
Set m_ItemArray(m_Count) = Item_Value
Set Add = Item_Value
Else
m_ItemArray(m_Count) = Item_Value
Add = Item_Value
End If
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''
'' Clear() Method
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Clear()
Call Class_Initialize()
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''
'' Count() Method
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function Count()
Count = m_Count
End Function

'''''''''''''''''''''''''''''''''''''''''''''''''''''
'' Remove() Method
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Sub Remove(Key_Index)
Dim i, j

' 方式(按关键字Key[字符串]; 按索引Index[整数])
Select Case VarType(Key_Index)
Case 8 ' 字符串 By Key
For i = 1 To m_Count
If LCase(Key_Index) = LCase(m_KeyArray(i)) Then
For j = i To m_Count - 1
m_KeyArray(j) = m_KeyArray(j + 1)
m_ItemArray(j) = m_ItemArray(j + 1)
Next

m_Count = m_Count - 1

ReDim Preserve m_KeyArray(m_Count)
ReDim Preserve m_ItemArray(m_Count)

Exit Sub
End If
Next
Case 2 ' 整数 By Index
i = Key_Index

If i > 0 And i < m_Count + 1 Then
For j = i To m_Count - 1
m_KeyArray(j) = m_KeyArray(j + 1)
m_ItemArray(j) = m_ItemArray(j + 1)
Next

m_Count = m_Count - 1

ReDim Preserve m_KeyArray(m_Count)
ReDim Preserve m_ItemArray(m_Count)

Exit Sub
End If
End Select

Err.Raise 333, "CollCls:第140行", "删除元素未成功,请检查指定的索引或关键字是否正确。"
End Sub

'''''''''''''''''''''''''''''''''''''''''''''''''''''
'' Item() Method
'''''''''''''''''''''''''''''''''''''''''''''''''''''
Public Function Item(Key_Index)
Dim i

'方式(按关键字Key[字符串]; 按索引Index[整数])
Select Case VarType(Key_Index)
Case 8 ' By Key
For i = 1 To m_Count
If LCase(Key_Index) = LCase(m_KeyArray(i)) Then
If IsObject(m_ItemArray(i)) = True Then
Set Item = m_ItemArray(i)
Else
Item = m_ItemArray(i)
End If

Exit Function
End If
Next
Case 2 ' By Index
i = Key_Index

If i > 0 And i < m_Count + 1 Then
If IsObject(m_ItemArray(i)) = True Then
Set Item = m_ItemArray(i)
Else
Item = m_ItemArray(i)
End If

Exit Function
End If
End Select

Item = Null
Err.Raise 444, "CollCls:第178行", "元素未找到,请检查指定的索引或关键字是否正确。"
End Function
End Class

4 个解决方案

#1













' 嵌入客户端集合对象定义
《SCRIPT》




Class clsA
Public a
Public b
Public c
End Class

Dim objA, objB
Dim objColl
Dim n

Set objA = New clsA
Set objB = New clsA
Set objColl = New clsCollection

With objA
.a = 123
.b = "456"
.c = "hello world"
End With

With objB
.a = "World Hello"
.b = "789"
.c = 123
End With

With objColl
.Add "objA", objA
.Add "objB", objB
End With

Document.Write "objA.c = " & objColl.Item("objA").c & "
"
Document.Write "objB.c = " & objColl.Item("objB").c & "
"
《SCRIPT》


#2


dictionary对象不行吗

#3


dictionary对象,好啊,多谢!
可是我的机器使用 Scripting 对象时,总是时灵时不灵,真是搞不定,没办法只好。。。

#4


我用增加时,dictionary时老是出现“此键已与该集合的一个元素关联 ”

推荐阅读
  • 深入理解Cookie与Session会话管理
    本文详细介绍了如何通过HTTP响应和请求处理浏览器的Cookie信息,以及如何创建、设置和管理Cookie。同时探讨了会话跟踪技术中的Session机制,解释其原理及应用场景。 ... [详细]
  • 本文详细介绍 Go+ 编程语言中的上下文处理机制,涵盖其基本概念、关键方法及应用场景。Go+ 是一门结合了 Go 的高效工程开发特性和 Python 数据科学功能的编程语言。 ... [详细]
  • 导航栏样式练习:项目实例解析
    本文详细介绍了如何创建一个具有动态效果的导航栏,包括HTML、CSS和JavaScript代码的实现,并附有详细的说明和效果图。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 扫描线三巨头 hdu1928hdu 1255  hdu 1542 [POJ 1151]
    学习链接:http:blog.csdn.netlwt36articledetails48908031学习扫描线主要学习的是一种扫描的思想,后期可以求解很 ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • PyCharm下载与安装指南
    本文详细介绍如何从官方渠道下载并安装PyCharm集成开发环境(IDE),涵盖Windows、macOS和Linux系统,同时提供详细的安装步骤及配置建议。 ... [详细]
  • 1:有如下一段程序:packagea.b.c;publicclassTest{privatestaticinti0;publicintgetNext(){return ... [详细]
  • 本文详细介绍了Akka中的BackoffSupervisor机制,探讨其在处理持久化失败和Actor重启时的应用。通过具体示例,展示了如何配置和使用BackoffSupervisor以实现更细粒度的异常处理。 ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • 360SRC安全应急响应:从漏洞提交到修复的全过程
    本文详细介绍了360SRC平台处理一起关键安全事件的过程,涵盖从漏洞提交、验证、排查到最终修复的各个环节。通过这一案例,展示了360在安全应急响应方面的专业能力和严谨态度。 ... [详细]
  • 本文探讨了在不使用服务器控件的情况下,如何通过多种方法获取并修改页面中的HTML元素值。除了常见的AJAX方式,还介绍了其他可行的技术方案。 ... [详细]
  • 使用Vultr云服务器和Namesilo域名搭建个人网站
    本文详细介绍了如何通过Vultr云服务器和Namesilo域名搭建一个功能齐全的个人网站,包括购买、配置服务器以及绑定域名的具体步骤。文章还提供了详细的命令行操作指南,帮助读者顺利完成建站过程。 ... [详细]
  • 解决Element UI中Select组件创建条目为空时报错的问题
    本文介绍如何在Element UI的Select组件中使用allow-create属性创建新条目,并处理创建条目为空时出现的错误。我们将详细说明filterable属性的必要性,以及default-first-option属性的作用。 ... [详细]
author-avatar
吃货程序猿
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有