作为Windows下可视化RAD工具的杰出代表,Delphi的最新版本——BorlandDelphi4在Delphi3的基础上,又增加了许多新功能、新特性乃至新语法、新单元——
作为
Windows下可视化
RAD工具的杰出代表,Delphi 的
最新版本——BorlandDelphi4在Delphi3的基础上,又增加了许多新功能、新特性乃至新语法、新单元——如
动态数组、
方法重载、默认参数等,从而为编程人员提供了更强劲、更方便的
开发工具和环境。其中,动态
数组的引入更是一个让人盼望已久的变化。
一、动态数组(DynamicArrays)简介:
在传统Pascal语言或Delphi先前版本所使用的Object Pascal语言中,数组指的是一组类型相同、带下标的又序的变量,是预先分配好的一块固定大小的存储单元,其语法如下: type
$#@60;数组类型名$#@62;=array[下标1..下标2]of$#@60;基类型$#@62;;
var
$#@60;数组变量名$#@62;:$#@60;数组类型名$#@62;;
或
var
$#@60;数组变量名$#@62;:array[下标1..下标2]of$#@60;基类型$#@62;
由传统数组的定义可知:传统数组的范围大小取决于在使用它之前即已定义下的下标1和下标2这两个值。数组变量的下标决不能超出这个范围。因此,传统数组是一种静态的数据结构,它无法在程序运行中动态地改变其容纳能力,应用范围无疑也受到了很大的局限性。
Borland公司(现在的Inprise公司)对这种“静态” 的数组的改造工作一直在进行着,先后引入了String、PChar两个字符串大类来解决字符数组的问题——消灭了程序中笨拙的array[N1..N2]ofchar和packedarray[N1..N2]of char语句。这一次,终于在BorlandDelphi4中将数组正式划分为静态数组(StaticArrays)和动态数组(DynamicArrays)两大类,以求通过后者来解决传统数组的痼疾。
动态数组的语法很简单: var
$#@60;数组变量名$#@62;:=arrayof$#@60;基类型$#@62;
.
.
.
下面就以一个实际例子来说明一下动态数组的应用和使用方法。
二、使用动态数组实现“模糊查询”实例
在一些数据库中,往往需要根据标题或文件名中的某个关键字(或词)来实现“模糊查询”,如有一个文件资料库,现要求查出所有文件名中包含“简报”两个字的文件,那么用FindKey()、GotoKey()等“精确制导”的方式自然不行,而Set ge 和Filter语句在关键字(或词)出现在字符串首部时倒能一用,对于出现在中间或末尾时的情况却无能为力。显然,单纯依靠检索函数或过程来一次性完成这类查询工作是不行的。
通过对问题的观察可知,“模糊查询”所操作的对象是字符串(String或PChar),给出的关键字(或词)是可能出现在各字符串中的子串,要确定在字符串中是否包含给出的子串,Delphi提供了两个函数:Pos(sub_s:String,s:String) 适用于String类型和StrPos(sub_p:PChar,p:PChar)——适用于PChar类型,若在目标串中含有给出的子串,则返回值为子串所在位置,否则为0。因此,要实现记录的“模糊查询”,只需将关键字(或词)作为子串,将数据库中对应的字段内容作为主串,然后做Pos或StrPos 运算即可。
但比较后的结果放在哪呢?由于数据库的记录个数通常是变化着的,而每次查询的结果又未必相同,因此,势必要求以一个动态的数据结构来存储查询结果。若使用指针型记录,则不但存储时较麻烦,而且查看检索结果也复杂得很。引入动态数组后就显得轻松多了,只需对数据库进行一次遍历,就实现各种要求了。
具体操作说明如下:
1、操作对象: ......
2、查询要求:输入一个关键字(或词),要求在“AREA” 字段中查找,将包含有该关键字(或词)的所在记录找出并返回结果(记录数),通过导航条 来显示命中记录。
3、Form及主要构件属性的设定: ......
4、编写各事件: ......
5、运行结果:
在编辑框中输入任意字符或字符串,然后单击“开始查找”按钮,程序查找完毕后将在编辑框下显示命中记录的条数,通过单击“开始查找”按钮下的导航条可显示具体的命中记录。[见图示]例)输入“美洲”,单击“开始查找”。显示查找结果为“符合要求的有3条记录”。单击导航条四个按钮,可进行命中记录向上、向下的逐条显示,并会自动提示是否已显示完毕。
本例所介绍的方法亦适用于其他类型和语言的数据库。
总之,Delphi4中的动态数组在处理一些变化的、类型较简单的数据时,是指针类型的良好代替者。若使用得当,将会给编程带来格外的方便。
查看本文来源