热门标签 | 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时老是出现“此键已与该集合的一个元素关联 ”

推荐阅读
  • 本文深入探讨了HTTP请求和响应对象的使用,详细介绍了如何通过响应对象向客户端发送数据、处理中文乱码问题以及常见的HTTP状态码。此外,还涵盖了文件下载、请求重定向、请求转发等高级功能。 ... [详细]
  • PHP 过滤器详解
    本文深入探讨了 PHP 中的过滤器机制,包括常见的 $_SERVER 变量、filter_has_var() 函数、filter_id() 函数、filter_input() 函数及其数组形式、filter_list() 函数以及 filter_var() 和其数组形式。同时,详细介绍了各种过滤器的用途和用法。 ... [详细]
  • 本文详细探讨了HTML表单中GET和POST请求的区别,包括它们的工作原理、数据传输方式、安全性及适用场景。同时,通过实例展示了如何在Servlet中处理这两种请求。 ... [详细]
  • Google排名优化-面向Google(Search Engine Friendly)的URL设计 ... [详细]
  • 本文详细介绍了中央电视台电影频道的节目预告,并通过专业工具分析了其加载方式,确保用户能够获取最准确的电视节目信息。 ... [详细]
  • 深入探讨CPU虚拟化与KVM内存管理
    本文详细介绍了现代服务器架构中的CPU虚拟化技术,包括SMP、NUMA和MPP三种多处理器结构,并深入探讨了KVM的内存虚拟化机制。通过对比不同架构的特点和应用场景,帮助读者理解如何选择最适合的架构以优化性能。 ... [详细]
  • 深入解析 Apache Shiro 安全框架架构
    本文详细介绍了 Apache Shiro,一个强大且灵活的开源安全框架。Shiro 专注于简化身份验证、授权、会话管理和加密等复杂的安全操作,使开发者能够更轻松地保护应用程序。其核心目标是提供易于使用和理解的API,同时确保高度的安全性和灵活性。 ... [详细]
  • 作者:守望者1028链接:https:www.nowcoder.comdiscuss55353来源:牛客网面试高频题:校招过程中参考过牛客诸位大佬的面经,但是具体哪一块是参考谁的我 ... [详细]
  • 本文探讨了在Windows Server 2008环境下配置Tomcat使用80端口时遇到的问题,包括端口被占用、多项目访问失败等,并提供详细的解决方法和配置建议。 ... [详细]
  • JavaScript 基础语法指南
    本文详细介绍了 JavaScript 的基础语法,包括变量、数据类型、运算符、语句和函数等内容,旨在为初学者提供全面的入门指导。 ... [详细]
  • 本文将探讨从ASP.NET 1.1到2.0期间编译系统的重要变革。通过对比两个版本的即时编译模型,我们将揭示2.0版本中引入的新特性和改进之处。 ... [详细]
  • 本文探讨了在使用basicHttpBinding通过HTTPS发送请求时遇到的握手失败问题,分析了可能的原因及解决方案。 ... [详细]
  • SharePoint Portal Server 2003 部署指南
    本文详细介绍了如何在一个实验环境中部署SharePoint Portal Server 2003,包括网络拓扑、所需服务器角色及具体步骤。通过本文,读者可以了解SharePoint Portal Server 2003的安装和配置过程。 ... [详细]
  • 本文详细介绍了在企业级项目中如何优化 Webpack 配置,特别是在 React 移动端项目中的最佳实践。涵盖资源压缩、代码分割、构建范围缩小、缓存机制以及性能优化等多个方面。 ... [详细]
  • 本文探讨了如何使用自增和自减运算符遍历二维数组中的元素。通过实例详细解释了指针与二维数组结合使用的正确方法,并解答了常见的错误用法。 ... [详细]
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社区 版权所有