创建Variant数组
在Session和Application对象中创建和使用一个Variant数组来存储值的方法目前尚未讨论,在这里作为一个非常有用的技术进行讨论。正如已经看到的那样,一个Variant数据类型可以包含一个数组,而不仅仅是一个值。
一个数组只是在内存的一个连续区域中以指定的次序存储二进制值的一个长行。要安排Variant,需要指向首项,并给出有关大小和结构的信息,脚本引擎可以做余下的事情。
可在一个Variant变量中创建一维、二维或多维数组,然后把该数组分配给一个应用程序层或用户会话层的变量,并保证整个数组可在相应的地方使用。下面代码演示了一个简单的一维数组的使用技术:
Dim varArray(3)
varArray(0) = “This is a”
varArray(1) = “Variant array”
varArray(2) = “stored in the”
varArray(3) = “Session object”
Session(“Variant_Array”) = varArray
3.  应用程序和会话在何时启动和结束
在介绍ASP应用程序和会话如何进行工作时提到过这个内容。以最基本的术语概述如下:
? 当第一个用户请求应用程序作用域内(即Web网站的缺省根目录内),或者在该网站的一个子目录内的一个用户定义的虚拟应用程序的一个ASP网页时,启动该应用程序。在任何用户会话启动之前发生。
? 当任意用户第一次请求在缺省应用程序或一个虚拟应用程序内的一个ASP网页时,启动一个会话(如果还没一个活动的会话)。
? 当用户在会话指定的超时周期内没有下载一个ASP网页时,会话结束。超时时间可以在脚本代码中使用Session.Timeout 属性进行设置,可在Properties对话框中对各个应用程序单独设置,或者通过Active Directory的IIS:部分修改IIS元数据库中的缺省值进行设置。调用Session.Abandon方法的一个网页完成执行以后,会话也会结束。
? 在一个应用程序中的最后一个活动会话结束以后,该应用程序立即结束。
4.  ASP处理指令
正如在第1章中所看到的,可以把一条处理指令增加到一个ASP网页。处理指令可以根据需要包含一个以上的条目。可以在语句中使用的关键字及其说明如表3-10所示:
表3-10  ASP指令关键字及说明
指令关键字 
说 明

LANGUAGE=”language_name” 
设置该网页的缺省的脚本语言,如:<% @ LANGUAGE=”VBScript” %>

ENABLESESSIONSTATE=”True”|”Fasle” 
当设置为“True”时,防止一个会话的cookie发送到浏览器,因此将不会创建新的Session对象,任何现有会话的内容将不再可用

CODEPAGE=”code_page” 
设置该网页的代码页,如<% @CODEPAGE=”1252” %>

LCID=”locale_identifier” 
设置该网页的位置标识符,如<% @LCID=”2057” %>

TRANSACTION=”transaction_type” 
指明该网页文件在一个事务环境下运行。有效值是:
“Required”:如果已有可用的事务,脚本将在其中运行;如果没有可用的事务,启动一个新的事务。
“Requires_New”:脚本将初始化一个新的事务。
“Supported”:如果已有可用的事务,脚本将在其中运行;而且不启动一个新的事务。
“Not_Supported”:脚本将不运行于任何已有的事务中,并且不初始化一个新的事务。
在第18章中详细介绍事务。

在一个网页上只能允许有一条处理指令,并且应该放在第一行。在处理指令中可以包含不止一个这样的条目,但必须用空格进行分隔,等号两端不能有空格,例如:
<% @LANGUAGE=”VBScript” CODEPAGE=”1252” LCID=”2057” %>

3.3.4 活动的ASP Application对象
    我们提供一些简单的网页,这些网页示范了使用过程中的ASP Application和Session对象。为了能够正常使用,必须把它们放到服务器上的一个虚拟应用程序内,并且把所提供的global.asa文件放到该应用程序的根目录中。最简单的办法是把global.asa文件放到缺省Web网站的根目录(缺省情况下是C:/InetPub/WWWRoot)中。
    对任何已有的global.asa文件重命名是一个好办法,可以在以后对该文件进行恢复。
    本书的所有例子文件都可以从我们的Web网站上得到,在例子的Chapter03子目录中还有本章的所有其余示例网页。
    在Chapter03子目录中,Default.asp网页是一个简单的菜单,该菜单允许运行Application和 Session示例网页,运行屏幕如图3-13所示:

图3-13  Default.asp运行屏幕
1.  显示Application集合的内容
单击第一个链接,打开名为show_application.asp的Application对象示例页面。它显示了虚拟应用程序当前的 Application对象的内容,如图3-14所示:

图3-14  Application对象的内容屏幕
注意到ASPCounter对象是StaticObjects集合的一个成员(通过<OBJECT>元素进行定义),但是其余部份(由 Server.CreateObject实例化)是Contents集合的成员。
可以看到使用global.asa例子网页放到这些集合中的值,这在前面已经看到:
<!-- Declare instance of the ASPCounter component with
        application-level scope //-->
<OBJECT ID=”ASPCounter” RUNAT=”Server” SCOPE=”Applicatoin”
            PROGID=”MSWC.Counters”>
</OBJECT>
...
...
<SCRIPT LANGUAGE=”VBScript” RUNAT=”Server”>
Sub Application_onStart()
    ‘Create an instance of an ADO Connection with application-level scope
    Set Application(“ADOConnection”) = Server.CreateObject(“ADODB.Connection”)
    Dim varArray(3)                   ‘Create a Variant array and fill it
    varArray(0) = “This is a”
    varArray(1) = “Variant array”
    varArray(2) = “stored in the”
    varArray(3) = “Application object”
    Application(“Variant_Array”) = varArray ‘Store it in thd Application
    Application(“Start_Time”) = CStr(Now)   ‘Store the date/time as a string
    Application(“Visit_Count”) = 0      ‘Set counter variable to zero
End Sub
...
...
</SCRIPT>
(1)  遍历Contents集合的代码
为了遍历Contents集合,可使用一个For Each ... Next结构。集合中的每一项可以是一个简单的Variant类型变量、一个 Variant数组或者一个对象的引用。因为需要对每种类型的值进行不同的处理,所以就不得不对每一个进行检查来判别其类型。
在VBScript中可使用VarType函数完成这个工作。这里使用IsObject和IsArray函数代替:
For Each objItem in Application.Contents
    If IsObject(Application.Contents(objItem)) Then
        Response.Write “Object reference: ‘” & objItem & “’<BR>”
    ElseIf IsArray(Application.Contents(objItem)) Then
        Response.Write “Array: ‘” & objItem & “’ contents are:<BR>”
        VarArray = Application.Contents(objItem)
        ‘Note: the following only works with a one-dimensional array
        For intLoop = 0 To UBound(varArray)
            Response.Write “  Index (“ & intLoop & “) = “ & _
                   ;      VarArray(intLoop) & “<BR>”
        Next
    Else
        Response.Write “Variable: ‘” & objItem & “’ = “ _
                   ;  & Application.Contents(objItem) & “<BR>”
    End If
Next
注意程序如何从Application对象检索该数组。将其分配给一个局部(Variant)变量,使用下面的语句:
varArray = Application.Contents(objItem)
使用UBound函数可以查找出数组的大小(元素的数量),这个值可以作为遍历的终止条件:
For intLoop = 0 UBound(varArray)
这个例子是一维数组,并将只显示这样的一个数组的内容。可根据需要编辑代码以处理多维数组,例如:
For intLoop = 0 To UBound(varArray)
    IntNumberOfDimensions = UBound(varArray, 1)
    For intDimension = 0 To intNumberOfDimensions
        Response.Write “  Index(“ & intLoop & “) = “ _
                & varArray(intLoop, intDimension)
    Next
    Response.Write “<BR>”
Next
(2)  遍历StaticObjects集合的代码
StaticObjects集合包含了所有在global.asa中使用<OBJECT>元素声明的对象引用。因为每个条目都是一个对象变量,可用简单些的代码对这个数组进行遍历。我们将输出对象的名字(在ID属性中原有的定义):
For Each objItem in Application.StaticObjects
    If IsObject(Application.StaticObjects(objItem)) Then
        Response.Write “<OBJECT> element: ID=’” & objItem & “’<BR>”
    End If
Next

转载于:https://www.cnblogs.com/winner/archive/2006/03/01/340186.html

创建Variant数组相关推荐

  1. Variant 数组

    Variant 数组  Variant:  一种可以拥有各种数据类型:  也可以告诉目前存储的数据是什么类型(通过使用VarType函数):  可以给相同的Variant分配不同的数据类型,只要Var ...

  2. LeetCode简单题之按既定顺序创建目标数组

    题目 给你两个整数数组 nums 和 index.你需要按照以下规则创建目标数组: 目标数组 target 最初为空. 按从左到右的顺序依次读取 nums[i] 和 index[i],在 target ...

  3. Java中创建泛型数组

    Java中创建泛型数组 使用泛型时,我想很多人肯定尝试过如下的代码,去创建一个泛型数组 T[] array = new T[]; 当我们写出这样的代码时编译器会报Cannot create a gen ...

  4. php中创建关联数组,以及遍历数组

    在这个地方我们将介绍在php中怎样来创建一个关联的数组,并且将数组进行遍历. <!DOCTYPE html> <html> <head> <title> ...

  5. python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值)、使用不同的基数(底数)在对数刻度上构建等距数组、可视化

    python使用np.logspace函数在对数刻度上创建一个对数等距数组实战:在对数刻度上创建一个数组(指定数值个数以及是否包含末尾界值).使用不同的基数(底数)在对数刻度上构建等距数组.可视化 目 ...

  6. 创建php数组的方法,创建PHP数组的方法讲解

    在本文将数组的各种创建方式用PHP实例代码的方式分享给大家,感兴趣的朋友可以了解下 看这篇文章之前相信大家都已经看过PHP中文手册关于数组这一节的讲解了,怎么样呢,看懂了多少?至少我第一次阅读文档时是 ...

  7. python定义一个空数组_python如何创建空数组?

    Python创建空数组的三种方式: 1.numpy指定形状为0 实际上,empty生成的数组当然可以为空,只要我们指定了相应的形状.例如,如果我们传入数组的形状参数为(0,3),则可以生成目标空数组: ...

  8. 【Android 安全】DEX 加密 ( 代理 Application 开发 | 加载 dex 文件 | 使用反射获取方法创建本应用的 dexElements | 各版本创建 dex 数组源码对比 )

    文章目录 一.不同 Android 系统创建 dex 数组源码对比 二.不同 Android 系统创建 dex 数组源码对比 三. Android 5.1 及以下系统反射方法并创建 Element[] ...

  9. arraylist转int数组_LeetCode 1389. 按既定顺序创建目标数组

    题目 1389. 按既定顺序创建目标数组 描述 示例 1: 输入:nums = [0,1,2,3,4], index = [0,1,2,2,1] 输出:[0,4,1,3,2] 解释: nums ind ...

最新文章

  1. linux dma拷贝数据到用户态,图解:零拷贝Zero-Copy技术大揭秘
  2. EeePC1000hg安装archlinux20121201和openbox
  3. windows live writer向cnblog发布文章设置(转)
  4. 视觉与听觉相结合的深度跨域情绪识别
  5. Boost:使用OpenCL和OpenCL计算直方图的代码示例
  6. Spring Security和多个过滤器链
  7. git粘贴命令行_如何使用git检测复制和粘贴代码?
  8. 【Fiddler篇】FreeHttp无限篡改http报文数据调试和mock服务
  9. EntytyFramework批量更新
  10. 互联网人必看的免费引流方法:十八种免费引流小技巧
  11. AAAI 2021论文:利用深度元学习对城市销量进行预测
  12. VR养狗,养的是寂寞还是潮流?
  13. matlab 模拟交易,股票量化投资策略模拟交易系统 [2017.01.19 更新]
  14. 笔记本电脑合上盖子不休眠设置方法
  15. [转载野猪的一篇文章] 设计模式--简单工厂模式在unity3d里面的使用
  16. Shorten the command line via JAR manifest or via a classpath file and rerun.
  17. 安卓手机来电防火墙_超好用的手机APP推荐,绝对有你不知道的!
  18. 创业公司、科技巨擎、产业龙头先后涌入 中国区块链技术平台三世同堂
  19. mac 安装python并切换到python3版本
  20. 智能手表音频特性测试_中学生可以戴99.9元的小米有品-Haylou/嘿喽智能手表上学吗?...

热门文章

  1. 最新(2019)斯坦福CS224n深度学习自然语言处理课程(视频+笔记+2017年合集)
  2. 构建一个完整的中文智能问答系统
  3. Stacking:Catboost、Xgboost、LightGBM、Adaboost、RF etc
  4. 黑苹果cpu架构???_自研桌面CPU,苹果对英特尔发“分手信”
  5. mysql查询添加数据库表_MySQL数据库篇之表的增删改查
  6. Python学习入门基础教程(learning Python)--5 Python文件处理
  7. PowerDesigner 中将Comment(注释)及Name(名称)内容互相COPY的VBS代码
  8. oracle rac 创建ocr,转:Oracle RAC 添加和删除OCR(10g)
  9. nvm 和 nrm 的安装与使用
  10. [2018.12.6]左偏树