asp定义数组详解
- 格式:pdf
- 大小:117.15 KB
- 文档页数:10
15种asp使用技巧(中文版)技巧1:给应用层文件使用GLOBAL.ASA技巧2:从产品源代码中移去HTML注释技巧3:多个Response.write声明技巧4:使用<OBJECT>标志例示对象技巧5:尽可能的使用本地(局部)变量技巧6:避免多维数组技巧7:避免公用(全局)变量技巧8:使用文字路径技巧9:使用"Dictionary"对象技巧10:充分利用浏览器的回退功能技巧11:避免使用服务器端变量技巧12:使用"option explicit"技巧13:将采集到的值拷贝到本地(局部)变量当中技巧14:谨慎使用session对象技巧15:做性能测试*技巧1:给应用层文件使用GLOBAL.ASA将文件载入GLOBAL.ASA中的一个应用层数组中,而不是通过使用ASP文件系统对象在页面上读取文件。
GLOBAL.ASA可用于指定事件脚本,也可用于声明拥有session或应用程序范围的对象。
它不直接显示给用户,而是存储应用层事件的信息和对象。
然后通过页面就可以指向存有数据的应用层数组。
这就意味着每有一个服务器端请求就读一次文件,不是每个用户每页读一次。
你可以运行一个独立的ASP文件去刷新应用层数组的内容,同时你也可以考虑使用dictionary对象(见技巧9)。
这个技巧可以大大加快你的系统速度。
那么将如何实现该技巧呢?如果你是一个脚本编写人员,必须使用文件系统对象读取文件放入一个数组或一个dictionary对象中。
然后在GLOBAL.ASA中读取文件并且把数组(放有你读取的文件内容)或dictionary对象放到应用层声明中。
这样就可让用户在数组或dictionary对象中存取信息,而不必每次通过一个ASP请求去提交信息。
但也许你会想“如果缓存中的内容需要更新又该怎么办呢?我敢打赌不会用到。
”其实不然。
如果缓存中的内容需要更新,你可以调用一个包含有可执行应用程序锁定命令脚本的仅管理员可存取的ASP文件,在数组或dictionary对象中更新缓存信息,最后执行应用程序锁定命令。
ASP(FSO)通过数组给文件列表排序当您使用FILESYSTEMOBJECT(fso)对象获得某个目录下的文件列表的时候,你有没有发现无法控制它们的排序方式,比如按照名字排序,按照扩展名排序,按照文件大小排序等等,让我们试着用数组给它们排排序儿。
如果您想通过名字排序,那将是非常简单的,但是假如你想通过文件大小或者文件创立时间等等来排序的时候,那么将有点麻烦。
我们将通过二维数组做到这一点。
下面的代码演示了如何通过选择排序方式达到的我们目的,单击排序,点两次就反着排了。
<HTML><HEAD><TITLE>文件排序演示</TITLE></HEAD><BODY><%' 设定一个演示目录,:)CONST DIRECTORY = "/"' 用常数定义排序方式CONST FILE_NAME = 0 '按照名字排序……依次类推CONST FILE_EXT = 1CONST FILE_TYPE = 2CONST FILE_SIZE = 3CONST FILE_CREATED = 4CONST FILE_MODIFIED = 5CONST FILE_ACCESSED = 6'获得排序命令,默认为按照名字排序req = Request("sortBy")If Len(req) < 1 Then sortBy = 0 Else sortBy = CInt(req)req = Request("priorSort")If Len(req) < 1 Then priorSort = -1 Else priorSort = CInt(req)'设置倒序If sortBy = priorSort Thenreverse = truepriorSort = -1Elsereverse = falsepriorSort = sortByEnd If' 接下来开始我们真正的代码了。
php数组定义PHP数组定义PHP是一种服务器端脚本语言,它支持各种数据类型,其中包括数组。
数组是一种数据结构,可以存储多个值,并且可以根据索引或键来访问这些值。
在PHP中,数组可以使用不同的方式进行定义和初始化。
一、定义数组1.1 索引数组索引数组是最常见的PHP数组类型。
它使用数字索引来访问元素,从0开始递增。
要定义一个索引数组,可以使用以下语法:```$array_name = array(value1, value2, value3, ...);```其中,$array_name是要创建的数组的名称,value1、value2、value3等是要存储在该数组中的值。
例如:```$fruits = array("apple", "banana", "orange");```这将创建一个名为$fruits的索引数组,并将三个字符串值存储在其中。
1.2 关联数组关联数组使用键值对来访问元素。
每个元素都有一个唯一的键(字符串或数字),用于标识该元素。
要定义关联数组,请使用以下语法:```$array_name = array(key1 => value1, key2 => value2, key3 => value3, ...);```其中,$array_name是要创建的关联数组的名称,key1、key2、key3等是每个元素的键名,value1、value2、value3等是相应元素的值。
例如:```$person = array("name" => "John", "age" => 30, "gender" => "male");```这将创建一个名为$person的关联数组,并将三个键值对存储在其中。
ASP编程入门教程解析
ASP是微软公司开发的代替CGI脚本程序的一种应用,它可以与数据库和其它程序进行交互,是一种简单、方便的编程工具。
ASP的网页文件的格式是.asp,现在常用于各种动态网站中。
我们为大家收集整理了关于ASP编程入门教程,以方便大家参考。
(一)怎幺使用asp正则表达式
正则表达式可以让用户通过使用一系列的特殊字符构建匹配模式,然后把匹配模式与数据文件、程序输入以及WEB页面的表单输入等目标对象进行比较,根据比较对象中是否包含匹配模式,执行相应的程序。
(二)怎幺使用asp数组
一个数组是一个基本的数据结构,它是由跟随若干数字的变量组成,代替了声明10个变量来代表10个值的过程,你可以声明一个数组,并且把10个元素存入到这个数组中。
(三)asp把数据导出为excel
我们在做项目的时候经常要将数据库的数据导出到excel中,很多asp用户并不知道怎幺写。
(四)ASP实现执行定时任务
一个很常见的ASP 问题: “如何定时工作流程执行网页?”, 之所以会问这个问题大部分是因为管理员可能会利用一个ASP 网页来作数据库维护的动作, 如备份。
php数组的定义PHP数组是一种用于存储多个数据的数据结构。
它可以包含多个元素,并且每个元素都有一个对应的索引值。
在PHP中,数组可以是索引数组或关联数组。
下面将分别介绍这两种数组的定义和使用方法。
1. 索引数组的定义:索引数组是最常用的数组类型之一,它的元素通过数字索引进行访问。
在PHP中,可以使用array()函数或简化的[]语法来定义索引数组。
例如:```php$fruits = array("apple", "banana", "orange");```或者```php$fruits = ["apple", "banana", "orange"];```上述代码定义了一个名为$fruits的索引数组,其中包含了三个水果的名称。
2. 关联数组的定义:关联数组是另一种常见的数组类型,它的元素通过指定的键名进行访问。
在PHP中,可以使用array()函数或简化的[]语法来定义关联数组。
例如:```php$student = array("name" => "John", "age" => 20, "major" => "Computer Science");```或者```php$student = ["name" => "John", "age" => 20, "major" => "Computer Science"];```上述代码定义了一个名为$student的关联数组,其中包含了一个学生的姓名、年龄和专业信息。
3. 数组的访问和修改:可以使用方括号加上索引或键名来访问数组中的元素。
出处:站长百科 ASP全面解析✓出处:站长百科✓原文地址:/wiki/ASP全面解析✓本电子书整理自站长百科ASP全面解析词条,查看内容请访问网站。
目录第一章Server对象 (2)第二章 ASP深入研究Application和Session对象 (11)一、Application对象的成员概述 (11)二、Session对象的成员概述 (14)三、Global.asa (16)四、本文实例中值得引起注意的两点 (22)第三章 ASP认识和优化connection对象 (24)站长百科(/wiki)站长自己的百科全书分享自己的建站知识 WIKI平台与站长一道共建知识库站长百科活动不断论坛发帖赚银币! 参加1美元竞拍更有机会赢2G超大免费空间! 超值好礼等您拿推荐内容:电子书下载 | 站长百科礼品兑换第一章Server对象Server对象提供对服务器上访问的方法和属性.大多数方法和属性是作为实用程序的功能提供的。
语法:Server.property|method属性(property)Server对象只有一个属性:ScriptTimeout 程序能够运行的最大时间 方法(Methods)CreateObject 建立一个对象实例.Execute 执行一个asp文件GetLastError 返回一个错误代码HTMLEncode 对指定的HTML代码进行转换.MapPath 将一个相对路径转化为一个绝对路径.Transfer 将当前的所有状态信息发送给另一个asp文件URLEncode 以URL形式转化指定的代码,包括空格Server对象的方法详细说明CreateObject语法Server.CreateObject( progID )参数progID指定要创建的组件名称,格式如下: [Vendor.]Component[.Version].要点:一般来说,用由Server.CreateObject方法创建的对象拥有页面的范围.这就说,当这页的asp程序执行完后,这种对象会自动地消失.出处:站长百科为了创建一个拥有Session或Application范围的对象,你可以在Global.asa文件中使用ExecuteExecute 方法呼叫一个ASP文件并且执行它就像这个呼叫的ASP文件存在这个ASP文件中一样。
数组的定义⼀.数组的定义(来源于Array.prototype)1.构造函数⽅法: (1)var arr = new Array();//没有参数等价于 var arr = []; (2)var arr = new Array(length);//创建指定长度的数组;预分配⼀个数组空间;但数组中没有存储值,甚⾄数组的索引属性'0','1'等还未定义 (3)var arr=new Array(值1,值2,值3...)2.字⾯量:var arr = []; var arr=[1,2,3]区别:new Array()只有⼀个参数(不能为⼩数:⾮法!报错!)时,会被当成是长度,并成为⼀个稀松数组;var arr1 = new Array(4);var arr2 = [4];console.log(arr1);//[undefined*4]console.log(arr2);//[4]var arr = new Array(3.4);console.log(arr);//Uncaught RangeError: Invalid array length⼆.数组的读写(不可溢出读,结果为undefined;可以溢出写)原理:数组索引仅仅是对象属性名的⼀种特殊类型,这意味着javascript数组没有'越界错误'的概念,.当试图查询任何对象不存在的属性还是,不会报错,只会得到undefined值.var arr = [1,2];console.log(arr[2]);//undefinedarr[4] = 5;//溢出写console.log(arr);//[1,2,undefined,undefined,5];console.log(arr[3]);//undefined--->实际上是arr['3']var obj = {};console.log(obj.age);//undefinedvar arr = [];console.log(arr['age']);//undefined注意:数组是对象的特殊形式.使⽤⽅括号访问数组就像⽅括号访问对象的属性⼀样,javascript将指定的数字索引值转换为字符串---索引1变为'1'---然后将其作为属性名来使⽤.数组的特别之处在于:当使⽤⼩于等于2^32-2的⾮负整数作为属性名时,数组会⾃动维护其length属性值;arr[Math.pow(2,32)-2] = 67;//索引arr[Math.pow(2,32)-1] =22;// 属性名arr[1]--->实际上是arr['1'];var arr = [1,2,3,4];console.log(arr);//[1, 2, 3, 4]//0:1//1:2//2:3//3:4//length:4console.log(arr[1])//2,实际上是访问数组的'1'属性;(1)可以⽤负数或⾮整数来索引数组.这种情况下,数值转换为字符串,字符串作为属性名来使⽤(即索引不是⾮负整数的情况下,只能当做常规的对象属性);(2)同样,如果凑巧使⽤了⾮负整数(即0和正整数)的字符串,它就当做数组索引,⽽⾮对象属性.(3)当使⽤的⼀个浮点数和⼀个整数相等时,也是当做数组索引即除了(2)和(3)情况,[]内的值都当成对象属性名(转换为字符串)var arr = [1,2,3,4];arr[-2] = 'name';//-2当做属性-------(1)arr[1.5] = 9;//1.5当做属性-----------(1)arr['3'] = 15;//数组索引;等价于arr[3]------(2)arr[1.00] = 23//数组索引;等价于arr[1]=23---(3)arr['1.00']=4;//1.00当做属性1.00arr['age'] = 6;//age:属性console.log(arr);// [1, 23, 3, 15, -2: "name", 1.5: 9, 1.00: 4,age:6]console.log(arr.length)//4 索引值为⼩于2^32的⾮负整数会⾃动维护其length值var obj = {};//空对象或不空的arr[obj] = '5';//属性名为[object Object]: "5"三.稀松数组:包含从0开始的不连续索引的数组;length属性值⼤于元素的个数,可以⽤Array()构造函数或简单地指定数组的索引值⼤于当前的的数组长度来创建稀疏数组1.var arr = new Array(5);//数组没有元素,但a.length = 52. a = [];//当前length为0; a[1000] = 0;//1000>0;稀疏数组,length变为1001;四.数组的常⽤⽅法(⼀)改变原数组的:reverse,push,pop,unshift,shift,splice,sort;(1)reverse()---颠倒数组中元素的顺序并返回新的数组。
ASP入门简单教材<%语句……%><2>定义变量dim语句<%dim a,ba=10b=”ok!”%>注意:定义的变量可以是数值型,也可以是字符或者其他类型的<3>简单的控制流程语句1. If 条件1 then语句1elseif 条件2 then语句2else语句3endif2.while 条件语句wend3.for count=1 to n step m语句1exit for语句2next二.ASP数据库简单*作教程<1>.数据库连接(用来单独编制连接文件conn.asp)<%Set conn = Server.CreateObject("ADODB.Connection")conn.Open "DRIVER={Microsoft Access Driver (*.mdb)}; DBQ=" & Server.MapPath("\bbs\db1\user.mdb")%>(用来连接bbs\db1\目录下的user.mdb数据库)<2>显示数据库记录原理:将数据库中的记录一一显示到客户端浏览器,依次读出数据库中的每一条记录如果是从头到尾:用循环并判断指针是否到末使用: not rs.eof如果是从尾到头:用循环并判断指针是否到开始使用:not rs.bof<!--#include file=conn.asp--> (包含conn.asp用来打开bbs\db1\目录下的user.mdb数据库) <%set rs=server.CreateObject("adodb.recordset") (建立recordset对象)sqlstr="select * from message" ---->(message为数据库中的一个数据表,即你要显示的数据所存放的数据表)rs.open sqlstr,conn,1,3 ---->(表示打开数据库的方式)rs.movefirst ---->(将指针移到第一条记录)while not rs.eof ---->(判断指针是否到末尾)response.write(rs("name")) ---->(显示数据表message中的name字段)rs.movenext ---->(将指针移动到下一条记录)wend ---->(循环结束)------------------------------------------------------rs.closeconn.close 这几句是用来关闭数据库set rs=nothingset conn=nothing-------------------------------------------------------%>其中response对象是服务器向客户端浏览器发送的信息<3>增加数据库记录增加数据库记录用到rs.addnew,rs.update两个函数<!--#include file=conn.asp--> (包含conn.asp用来打开bbs\db1\目录下的user.mdb数据库) <%set rs=server.CreateObject("adodb.recordset") (建立recordset对象)sqlstr="select * from message" ---->(message为数据库中的一个数据表,即你要显示的数据所存放的数据表)rs.open sqlstr,conn,1,3 ---->(表示打开数据库的方式)rs.addnew 新增加一条记录rs("name")="xx" 将xx的值传给name字段rs.update 刷新数据库------------------------------------------------------rs.closeconn.close 这几句是用来关闭数据库set rs=nothingset conn=nothing-------------------------------------------------------%><4>删除一条记录删除数据库记录主要用到rs.delete,rs.update<!--#include file=conn.asp--> (包含conn.asp用来打开bbs\db1\目录下的user.mdb数据库) <%dim nameset rs=server.CreateObject("adodb.recordset") (建立recordset对象)sqlstr="select * from message" ---->(message为数据库中的一个数据表,即你要显示的数据所存放的数据表)rs.open sqlstr,conn,1,3 ---->(表示打开数据库的方式)-------------------------------------------------------while not rs.eofif rs.("name")=name thenrs.deleters.update 查询数据表中的name字段的值是否等于变量name的值"xx",如果符合就执行删除,else 否则继续查询,直到指针到末尾为止rs.movenextemd ifwend------------------------------------------------------------------------------------------------------------rs.closeconn.close 这几句是用来关闭数据库set rs=nothingset conn=nothing-------------------------------------------------------%><5>关于数据库的查询(a) 查询字段为字符型<%dim user,pass,qq,mail,messageuser=request.Form("user")pass=request.Form("pass")qq=request.Form("qq")mail=request.Form("mail")message=request.Form("message")if trim(user)&"x"="x" or trim(pass)&"x"="x" then (检测user值和pass值是否为空,可以检测到空格)response.write("注册信息不能为空")elseset rs=server.CreateObject("adodb.recordset")sqlstr="select * from user where user='"&user&"'" (查询user数据表中的user字段其中user字段为字符型)rs.open sqlstr,conn,1,3if rs.eof thenrs.addnewrs("user")=userrs("pass")=passrs("mail")=mailrs("message")=messagers.updaters.closeconn.closeset rs=nothingset conn=nothingresponse.write("注册成功")end ifrs.closeconn.closeset rs=nothingset conn=nothingresponse.write("注册重名")%>(b)查询字段为数字型<%dim numnum=request.Form("num")set rs=server.CreateObject("adodb.recordset")sqlstr="select * from message where id="&num (查询message数据表中id字段的值是否与num 相等,其中id为数字型)rs.open sqlstr,conn,1,3if not rs.eof thenrs.deleters.updaters.closeconn.closeset rs=nothingset conn=nothingresponse.write("删除成功")end ifrs.closeconn.closeset rs=nothingset conn=nothingresponse.write("删除失败")%><6>几个简单的asp对象的讲解response对象:服务器端向客户端发送的信息对象,包括直接发送信息给浏览器,重新定向URL,或设置cookie值request对象:客户端向服务器提出的请求session对象:作为一个全局变量,在整个站点都生效server对象:提供对服务器上方法和属性的访问(a) response对象的一般使用方法比如:<%resposne.write("hello, welcome to asp!")%>在客户端浏览器就会看到hello, welcome to asp! 这一段文字<%response.Redirect("")%>如果执行这一段,则浏览器就会自动连接到“搜狐”的网址关于response对象的用法还有很多,大家可以研究研究request对象的一般使用方法比如客户端向服务器提出的请求就是通过request对象来传递的列如:你在申请邮箱的所填写的个人信息就是通过该对象来将你所填写的信息传递给服务器的比如:这是一段表单的代码,这是提供给客户填写信息的,填写完了按“提交”传递给request.asp文件处理后再存入服务器数据库<form name="form1" method="post" action="request.asp"><p><input type="text" name="user"></p><p><input type="text" name="pass"></p><p><input type="submit" name="Submit" value="提交"></p></form>那么request.asp该如何将其中的信息读入,在写入数据库,在这里就要用到request对象了,下面我们就来分析request.asp的写法<%dim name,password (定义user和password两个变量)name=request.form(“user”) (将表单中的user信息传给变量name)password=request.form(“pass”) (将表单中的pass信息传给变量password)%>通过以上的几句代码我们就将表单中的数据读进来了,接下来我们要做的就是将信息写入数据库了,写入数据库的方法上面都介绍了,这里就不一一复述了[ Last edited by 流烟回眸on 2005-7-26 at 13:53 ]【分享】asp论坛制作(初学的好东西)前言:现在网上的论坛到处都有,但不知您是否遇到过这样的情况:在杂乱无章的讨论信息中来寻找自己想要的内容,是一件很费费时费力的事情,到后来,您就都不想去看什么论坛了。
asp定义数组详解数组是有序数据的集合。
数组中的元素可以不属于同一个数据类型。
用一个统一的数组名和下标来唯一地确定数组中的元素,更改其中一个元素并不会影响其它元素。
数组的下标是有界的,分为下界和上界。
数组可以用Dim、Private、Public或Static来声明,它们的语法格式相同。
下面只介绍用 Dim声明数组的方法。
1.数组的定义与声明数组的定义语法如下:Dim 数组名( [[下标下界 To ] 下标上界] ) [As 数据类型]例如(假设在当前模块中数组的缺省下界为0)):① Dim A(10) As Integer表示数组名为A,此数组下标下界为缺省值0,下标上界为10,有11个Integer类型的元素,从A(0)、A(1)到A(10)。
② Dim B(1 To 20) As Integer表示数组名为B,此数组下标下界为1,下标上界为20,有20个Integer类型的元素,从B(1)到B(20)。
③Dim DayArray(50)表示DayArray 是一个有51 个索引(从0 到50)元素的Variant 数组。
④Dim Matrix(3, 4) As Integer表示Matrix 是一个二维 Integer 数组。
⑤Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double表示MyMatrix 是一个显式指定了上下界的三维 double 数组。
⑥Dim BirthDay(1 To 10) As Date表示BirthDay 是一个索引从 1 到 10 的 Date型数组。
2.Option Base 语句Option Base 语句在模块级别中使用,用来声明数组下标的缺省下界。
Option Base 语句的语法如下:Option Base {0 | 1}说明:缺省状态下数组下界为 0,此时无需使用 Option Base 语句。
如果使用该语句规定数组下界1,则必须在模块的数组声明之前使用Option Base 语句。
asp定义数组详解数组是有序数据的集合。
数组中的元素可以不属于同一个数据类型。
用一个统一的数组名和下标来唯一地确定数组中的元素,更改其中一个元素并不会影响其它元素。
数组的下标是有界的,分为下界和上界。
数组可以用Dim、Private、Public或Static来声明,它们的语法格式相同。
下面只介绍用 Dim声明数组的方法。
1.数组的定义与声明数组的定义语法如下:Dim 数组名( [[下标下界 To ] 下标上界] ) [As 数据类型]例如(假设在当前模块中数组的缺省下界为0)):① Dim A(10) As Integer表示数组名为A,此数组下标下界为缺省值0,下标上界为10,有11个Integer类型的元素,从A(0)、A(1)到A(10)。
② Dim B(1 To 20) As Integer表示数组名为B,此数组下标下界为1,下标上界为20,有20个Integer类型的元素,从B(1)到B(20)。
③Dim DayArray(50)表示DayArray 是一个有51 个索引(从0 到50)元素的Variant 数组。
④Dim Matrix(3, 4) As Integer表示Matrix 是一个二维 Integer 数组。
⑤Dim MyMatrix(1 To 5, 4 To 9, 3 To 5) As Double表示MyMatrix 是一个显式指定了上下界的三维 double 数组。
⑥Dim BirthDay(1 To 10) As Date表示BirthDay 是一个索引从 1 到 10 的 Date型数组。
2.Option Base 语句Option Base 语句在模块级别中使用,用来声明数组下标的缺省下界。
Option Base 语句的语法如下:Option Base {0 | 1}说明:缺省状态下数组下界为 0,此时无需使用 Option Base 语句。
如果使用该语句规定数组下界1,则必须在模块的数组声明之前使用Option Base 语句。
注意:(1)Dim、Private、Public、ReDim 以及Static 语句中的To 子句提供了一种更灵活的方式来控制数组的下标。
不过,如果没有使用To 子句显式地指定下界,则可以使用Option Base 将缺省下界设为1。
使用 Array 函数创建的数组的下界也受 Option Base 语句指定的下界的决定, 除非Array 是由类型库(例如VBA.Array )名称限定,如果是由类型库名称限定,则使用Array 函数创建的数组的下界不受Option Base 的影响。
(1) Option Base 语句只影响位于包含该语句的模块中的数组下界。
关于数组声明的几点说明:①数组名命名规则和变量名的相同。
②数组名后是用圆括弧括起来的,不能用方括弧,不同于C语言。
③下标的下界必须不能大于其上界。
④可以用变量名或常数名(以及实数)作下标的边界。
当下标的边界是常数名时,数组的大小固定,当下标的边界是变量名时,数组的大小可作动态定义,即数组的大小取决于程序运行过程中变量的值。
因此,VB 中数组又可以分为两种数组:静态数组、动态数组。
3.静态数组静态数组是指数组元素的个数是固定不变的,即它们占用的内存空间大小是固定不变的。
根据固定大小数组的维数不同,可以将它分为一维数组和多维数组。
声明多维数组的语法格式为:Dim 数组名([下标边界列表]) [As 数据类型]下标边界的定义形式:[下标下界 To]下标上界下标边界列表指用逗号分开的数组各维的下标边界,即[下标下界To]下标上界,[下标下界To]下标上界,……,[下标下界To]下标上界(第一维)(第二维)(第n维)当n=1时,数组称作一维数组;当n=2时,数组称作二维数组;依次类推,当n=m时,数组称作m维数组。
下面举例介绍一维数组的使用。
’声明一个长度为51的字符串数组FriendsNameDim FriendsName(50) As String’声明一个长度为11的全局整型数组ClassPublic Class(10) As Integer一维数组中的元素个数为(上界-下界+1)。
为数组赋初值可以采用循环语句,如:Dim I As IntegerFor I = 0 To 11 ’循环语句的使用程序流程的控制C(I) = INext I如果不显式指定下标下界,则数组的下标下界由Option Base 语句控制。
如果没有 Option Base 语句则下界为默认为 0。
数组的维数并不限于2,在VB中,可以扩大至于60,在实际应用上对三维以上的数组的应用是不多的。
定义一个多维数组时只需一条Dim语句指定数组的所有下标边界即可,使用多维数组的可以很方便的表示一些有意义的统计数据。
例如:Dim Profit(16,10,12) As Currency这个Profit数组可用来表示以店名、部门及月份为参数的某百货公司的利润。
如:Profit(2,8,11)代表了第二分店的第八部门在11月份的利润。
4.动态数组有时在数组开始使用前,不能知道需要多大的数组才能满足实际需要。
当然可以把数组的大小定义到足够大来满足任意的实际应用需要,这种方法效率很低(大量浪费内存空间)。
如果使用动态数组,就可以在程序运行时根据实际需要,精确定义数组的大小。
在声明数组时,不给出维数列表就是将数组声明为动态数组。
例如: Dim MyArry() As Integer在使用动态数组前,必须使用ReDim语句把它重新定义。
如前面声明的数组MyArry,可以用以下语句将它定义为一个动态二维数组。
ReDim MyArry(10,10)还可以通过重复执行ReDim语句,多次定义动态数组。
使用ReDim最多能定义数组的维数是60。
ReDim语句可以改变数组每维的元素个数,但不能改变维数。
下面是对ReDim语句的一个标准应用举例。
Dim MyArry() As Single ‘声明动态数组ReDim MyArry(30,20,10) ‘重新定义数组ReDim MyArry(50,23,21) ‘再次重新定义数组ReDim的语法与Dim的相同,此外,它还有选择项Preserve关键词: ReDim Preserve 数组名([ [下标下界 To]下标上界])[As 数据类型]例如:ReDim MyArry(50,23,21)ReDim Preserve MyArry(50,23,50)注意:使用ReDim 时,重新定义数组会使所有数组元素的值消失,而使用Preserve可以保留数据。
但是用Preserve只能在改变数组的最后一维的大小时,保留数组的数据。
对于一维数组来说,所有数据都会保留,而对于多维数组:只能改变最后一维的大小,才能保留全部数组数据,否则出错。
5.LBound 函数和UBound 函数LBound 函数和Ubound函数都是返回一个 Long 型数据,前者得到的值为指定数组维可用的最小下标,而后者得到的是最大下标。
它们的语法为:LBound(数组名[, 指定的维数])UBound(数组名[, 指定的维数])其中数组名是必选的。
指定的维数是可选的,表明指定返回哪一维的下界。
1 表示第一维,2 表示第二维,如此类推。
如果省略指定的维数,就默认为是 1。
关于如何使用LBound 函数与 UBound 函数可参见下例:Dim A(1 to 100,3,-3 to 4) As Integer ’定义一三维数组,假定没有使用Option Base 语’句改变数组下界的默认值。
对数组A使用Lbound 和Ubound函数,其返回值列表如下所有维的缺省下界取决于Option Base 语句的设置。
可以看出对一数组使用LBound 函数与UBound 函数,可用于确定一个数组中元素的个数。
对于那些在声明中用To 子句来设定维数的数组而言,它们可以用任何整数作为下界而不受Option Base 语句的限制。
6.数组的高级功能尽管数组最通常被用来存储成组的变量,但是在别的一些方面数组也是很有用的。
可以将一个数组的内容赋值给另一个数组、创建返回数组的函数,还可以创建返回数组的属性。
在许多情况下,这些技术能改进应用程序的性能。
正如可以将一个变量的值赋给另一个变量,例如StrA = StrB ,也可以将一个数组的内容赋给另一个数组。
例如,要将一字节型数组从一个位置复制到另一个位置。
可以通过每次复制一个字节来实现,程序如下:Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)‘参数oldCopy()是源数组,newCopy()是目标数组Dim i As IntegerReDim newCopy (Lbound(oldCopy) To UBound(oldCopy))’重新定义动态数组For i = Lbound(oldCopy) To Ubound(oldCopy) ’循环赋值 newCopy(i) = oldCopy(i)NextEnd Sub一个更有效的简单的方法就是直接将一个数组赋给另外一个数组:Sub ByteCopy(oldCopy() As Byte, newCopy() As Byte)‘参数oldCopy()是源数组,newCopy()是目标数组newCopy = oldCopy ’利用数组直接进行赋值End Sub关于变量赋值有一些规则需要铭记。
例如,虽然可以将一个声明为整型的变量赋给一个声明为长整型的变量而不会产生任何问题,但是将一个长整型变量赋给一个整型变量就很容易导致溢出错误。
除了遵守有关数据类型变量之间赋值时的规则外,数组赋值还要遵从另外一些规则,包括数组维数,每一维的大小,以及数组是固定的还是动态的。
①维数、数据类型不同的数组赋值考虑的几个因素l 赋值符左边的数组类型:固定数组(Dim x(1 to 10) As Integer) 或者动态数组 (Dim x() As Integer)。
l 赋值符左边数组的维数是否和赋值符右边数组的维数匹配。
l 赋值符两边数组的每一维的数组元素个数是否匹配。
即使数组的声明不同,维数也可能匹配。
比如一个数组的每一维元素从0 开始编号而另一个则从 1 开始,维数也可能匹配。
l 赋值符两边所有元素的数据类型必须是相容的。
这些规则和变量赋值的规则是一致的。
表3-6显示了这些因素的影响:数组赋值时的错误可能发生在编译时,也可能发生在运行时(例如,如果数据类型不能强制转换或赋值试图重新声明(ReDim) 一个静态数组)。
设计程序时要添加错误处理以确保数组在赋值之前是匹配的。
②编写返回数组的函数从一个函数返回一组值是可能实现的。