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

推荐阅读
  • 请问有谁能帮忙将满足条件的邮件内容弄成一封就将所有的完成啊?我现在满足条件的一个就发送一封,有所有满足的就会发送很多。请帮帮忙!真心感谢!谢谢!!<%@LANGUAGEVBSCRIP ... [详细]
  • 本文详细介绍了Java编程语言中的核心概念和常见面试问题,包括集合类、数据结构、线程处理、Java虚拟机(JVM)、HTTP协议以及Git操作等方面的内容。通过深入分析每个主题,帮助读者更好地理解Java的关键特性和最佳实践。 ... [详细]
  • UNP 第9章:主机名与地址转换
    本章探讨了用于在主机名和数值地址之间进行转换的函数,如gethostbyname和gethostbyaddr。此外,还介绍了getservbyname和getservbyport函数,用于在服务器名和端口号之间进行转换。 ... [详细]
  • 我现在写了这样的函数:FunctionopenConnection()SetcnnCreateObject(ADODB.Connection)cnn.Connec ... [详细]
  • 注意:客户端要装OFFICE下面我就把代码给大家参考一下,希望大家以后能用到。对WORD文档,使用的文字型窗体区域的功能,所有区域定义好以后有个名字,也就是要替换的名字。(替换内容长度可以 ... [详细]
  • Howwouldyouautomateloggingintoawebsiteanddownloadingapageusingvbscript?您如何自动登录网站并使用vbs ... [详细]
  • 本文将介绍如何编写一些有趣的VBScript脚本,这些脚本可以在朋友之间进行无害的恶作剧。通过简单的代码示例,帮助您了解VBScript的基本语法和功能。 ... [详细]
  • 本文详细介绍了如何解决Uploadify插件在Internet Explorer(IE)9和10版本中遇到的点击失效及JQuery运行时错误问题。通过修改相关JavaScript代码,确保上传功能在不同浏览器环境中的一致性和稳定性。 ... [详细]
  • 本文介绍了如何使用JQuery实现省市二级联动和表单验证。首先,通过change事件监听用户选择的省份,并动态加载对应的城市列表。其次,详细讲解了使用Validation插件进行表单验证的方法,包括内置规则、自定义规则及实时验证功能。 ... [详细]
  • 在金融和会计领域,准确无误地填写票据和结算凭证至关重要。这些文件不仅是支付结算和现金收付的重要依据,还直接关系到交易的安全性和准确性。本文介绍了一种使用C语言实现小写金额转换为大写金额的方法,确保数据的标准化和规范化。 ... [详细]
  • 2023年京东Android面试真题解析与经验分享
    本文由一位拥有6年Android开发经验的工程师撰写,详细解析了京东面试中常见的技术问题。涵盖引用传递、Handler机制、ListView优化、多线程控制及ANR处理等核心知识点。 ... [详细]
  • 从 .NET 转 Java 的自学之路:IO 流基础篇
    本文详细介绍了 Java 中的 IO 流,包括字节流和字符流的基本概念及其操作方式。探讨了如何处理不同类型的文件数据,并结合编码机制确保字符数据的正确读写。同时,文中还涵盖了装饰设计模式的应用,以及多种常见的 IO 操作实例。 ... [详细]
  • 脚本下载:CreateHibernationWindowsTile(VBScript).ziphttp:gallery.technet.microsoft.comscriptcenterSc ... [详细]
  • <tablecellspacing0cellpadding0>&l ... [详细]
  • functiongetReviews(){varpaidocument.assess.pai.Reviewsif(check()){createXMLHttp_s();strAR ... [详细]
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社区 版权所有