EDU511 国际专业IT教育服务门户 |
|
|
运行perl DBI日期:08-05-04 21:43:14 点击: 来源:CSDN 在这里,已经看到许多涉及DBI 程序设计的概念,所以让我们继续做一些样例数据库能处理事情。最初,第1章简述了我们的目标。本章通过编写DBI 脚本,我们将处理的那些问题在这里列出。 对于学分保存方案,我们想能够检索任何给定的测验或测试的分数。 对于历史联盟,我们想做下面的事情: 以不同格式产生成员目录。我们想在年度宴会程序中,以可以用于生成显示目录的格式使用一个只有名称的列表。 寻找不久就要更新其成员资格的League 成员,然后发送电子邮件通知他们。 编辑成员项目(毕竟,在更新成员资格时,我们将要更新他们的终止日期)。 寻找分享共同兴趣的成员。 使这个目录联机。 对于这样一些任务,我们将编写从命令行上运行的脚本。其他任务,我们将在7 . 4节“在Web 应用程序中使用DBI”中创建脚本,可以与Web 服务器配合使用。在本章的最后,我们将仍有许多有待完成的目标。将在第8章“PHP API”中,完成剩余的目标。 生成历史同盟目录 我们的目标之一是能以不同格式产生历史同盟目录的信息。我们将生成的最简单格式是一个年度宴会程序的成员名列表。那可能是一个简单的无格式文本列表。它将成为创建这个程序的一部分较大文档,所以,我们所需要的就是可以粘贴到文档中的一些内容。 对于可显示的目录,则需要一种比无格式文本更好的表示方法,原因是我们想把一些内容更精细地格式化。这里一个合理的选择为RT F(丰富的文本格式Rich Text Format),它是由Microsoft 开发的一种格式,可以由许多字处理程序来识别。当然, Word 就是这种程序之一,但是许多其他的软件,如WordPerfect 和A p p l e Work 也是可以识别的。不同的字处理程序对RTF 的支持程度也有所不同,但是我们将使用由即使对最低级别RT F都确信的任何字处理程序所支持的全部RTF 规定的一个基本子集。 生成宴会列表和RTF 目录格式的过程本质上是一样的:发布查询来检索这些项目,然后运行将每个项目提取和格式化的循环。给出了基本的相似之处,就能很好地避免编写两个分开的脚本。所以,我们编写一个单独的脚本g e n _ d i r,它可以以不同的格式从这个目录生成输出。我们可以这样组织这个脚本: 1) 在编写出项目内容之前,完成这个输出格式可能需要的任何初始化。宴会程序成员列表不需要任何特殊的初始化,但是我们需要为这个RTF 版本编写一些初始的控制语言。 2) 提取和显示每个项目,将我们要输出的类型适当地格式化。 3) 处理完所有的项目之后,还要完成任何必需的清除和终止。除了这个RTF 版本需要的一些关闭控制语言以外,宴会列表不需要特殊的处理。 将来,我们可能想使用这个脚本以其他格式编写输出,所以我们通过设置“转换盒”——每个输出格式都有一个元素的散列,使它成为可扩展的。每个元素都指定对给定格式生成适当输出的函数:初始化函数、编写项目函数和清除函数如下所示: 由一个格式名(在这种情况下的“ b a n q ue t”和“r t f”)标识转换盒的每个元素。我们将编写这个脚本,以便在运行它时可以在命令行中指定想要的格式: % gen_dir banquet % gen_dir rtf 通过以这种方式设置转换盒,我们可以很容易地增加新格式的性能: 1) 编写三个格式化函数。 2) 向转换盒增加一个指向那些函数的新元素。 3) 为了以新的格式产生输出,调用g e n _ d i r,并在命令行中指定这个格式名。 按照命令行中的第一个参数所选择的适当转换盒项目的代码如下所示。它是由于输出格式的名称为%switchbox 散列中关键字。如果在转换盒中不存在这样的关键字,则这个格式是无效的。不需要这个代码中的硬连线格式;如果向转换盒增加新的格式,则自动地检测它。如果在命令行中没有指定格式名,或者指定了一个无效的名称,则这个脚本产生错误消息,并显示一列允许的名称: 如果在命令行指定了一个有效的格式名,则前述的代码设置$ f un c _ h a s h r e f。它的值将是指向选择了格式输出的编写函数的散列引用。然后我们可以运行这个选择项目的查询。之后,我们调用初始化函数、提取和显示这些项目,并激活清除函数: 因为某种原因,提取项目的循环使用了fetchrow_hashref( )。如果这个循环提取数组,则这个格式化函数必须知道列的次序。它可能通过访问$sth->{NAME} 属性(它含有返回次序的列名)来得到,但为什么烦扰呢?通过使用散列引用,格式化函数将只能命名那些想使用$entry_ref->{col_name} 的列值。那样效率就非常低,但它容易做到,并可用于想生成的任何格式,因为我们知道我们需要的任何域都在散列中。 剩余的工作就是为每种输出格式编写这些函数(也就是说,通过转换盒项目为这些函数命名)。 1. 生成宴会程序成员列表 对于这种输出格式,我们只想要成员的姓名。不需要初始化或清除调用。只需要一个项目格式化函数: format_banquet_entry( ) 的参数是行的列值的散列引用。这个函数将名和姓连在一起,加上可能出现的任何后缀。这里的窍门是如“ J r.”或“S r.”后缀的前面应该有一个逗号或空格,但是如“I I”或“I I I”后缀的前面只能为一个空格: 因为字母‘I’、‘V’和‘X’覆盖了所有生成的数字,从第1到第3 9,所以我们可以使用下面的测试来确定是否增加一个逗号: 和名称放在一起的format_banquet_entry( ) 的代码也是这个目录的RTF 版本将需要的一些内容。然而,并不是复制format_rtf_entry( ) 中的代码,让我们将它填入函数中: 将确定名称的字符串放在format_name( ) 函数中,将把format_banquet_entry( ) 函数减少到几乎没有: 2. 生成显示格式的目录 生成这个目录的RTF 版本比生成宴会程序成员列表更要棘手一些。首先,我们需要从每个项目中显示更多的信息。其次,我们需要用每个项目产生一些RTF 控制语言来完成我们想要的作用。RTF 文档的最小框架是这样的: 这个文档用花括号‘ {’和‘ }’作为开始和结束。RTF 关键字用反斜线符号开始,并且文档的第一个关键字必须为\ r t f n,n为这个文档对应的RTF 规定的版本号。如果按我们的目的,0就比较合适。 在这个文档的内部,我们指定字体表来说明这些项目所使用的字体。字体表信息列在组中,由含有前导的\fonttbl 关键字和一些字体信息的花括号组成。在框架中说明的这个字体表把字体号0 定义为Ti m e s(我们只需要一个字体,但是如果想显示得更好一些,可以使用多种字体)。 下面的一些指示设置了缺省格式风格: \plain 选择无格式的格式, \f0 选择字体0(我们已经在字体表中定义为Times ),\fs24 设置字体大小为12个点阵(\fs 后面的数量表示半个点阵的大小)。设置页边空白并不是必需的;大多数的字处理程序将提供合理的缺省值。 要想得到一个非常简单的方法,可以将每个项目显示为一系列的行,每行上都有一个标号。如果对应于特定输出行的信息缺失,则忽略这个行(例如,没有电子邮件地址的成员没有显示“ E m a i l :”行)。一些行(如“ A d d r e s s :”行)由多个列(街道、城市、州、邮政编码)中的信息构成,所以这个脚本必须能够处理缺失值的各种组合。这里是我们将使用的输出格式的样例: ( 责任编辑:) 前一篇: 后一篇: 相关新闻(文章)
|
登录模块加载中...
|
| 友情链接 | |