第 10章 文本文件的访问
ASP动态网页设计教程
2
第 10章 文本文件的访问标准的 HTML并没有提供文件访问的能力,因此若有文件访问的需求时就必须通过 CGI程序访问服务器上的文件。在 ASP程序中,要访问 Server上的文件必须先创建 FileSystemObject对象,然后利用此对象所提供的
OpenTextFile(打开文件 )或 CreateTextFile(创建新文件 )创建 File对象,最后调用 File对象的 Write Line及 Read Line
访问文件。
文本文件虽可以通过 ASP访问,但必须注意文件访问权限的问题。若目录或文件没有写入的权限时,
Internet的用户仍然无法写入数据,只有通过“资源管理器”的“安全设置”,将文件写入的权限开放,方能使用创建文件及写入文件的功能。
3
第 10章 文本文件的访问本章将针对文本文件的访问,介绍 ASP提供的文本文件访问功能及使用权限问题,并以 SQL Server连接参数设置的范例,介绍以 Web接口管理 SQL Server
的应用。
10.1 FileSystemObject与 File对象
10.2 FileSystemObject的其他功能
10.3 File对象的其他功能
10.4 加载 SQL Server连接参数范例
10.5 编辑 SQL Server连接参数范例
10.6 HTML套用文本文件范例
4
10.1 FileSystemObject与 File对象
ASP无法完成的操作,Microsoft主张利用 COM来解决。 FileSystemObject是利用 COM写成的组件,它提供文本文件访问的能力。通过 FileSystemObject我们可以弥补 ASP无法访问文本文件的遗憾,完成网站上各种可能发生的情况。创建 FileSystemObject的 ASP程序代码如下:
Set fso= Server.CreateObject("Scripting.FileSystemObject")
Set fp= fso.OpeoTextFile( "文件名称 ")
或
Set fso= Server.CreateObject("Scripting.FileSystemObject")
Set fp= fso.CreateTextFile( "文件名称 ")
5
10.1 FileSystemObject与 File对象上述的程序代码在创建 FileSystemObject之后,可搭配 OpenTextFile及 CreateTextFile两个方法创建 File对象。有关这两个对象的使用方法说明如下。
1,OpenTextFile
OpenTextFile 的语法如下:
Set FileObjectName = FileSystemObject.OpenTextFile
( filename,io_mode,AutoCreate)
Filename:打开的文件名称,可包含磁盘驱动器、目录、文件名及扩展名。另外,您也可以使用 Server对象的 MapPath方法取得文件所在位置,例如取得网页
index.htm完整路径的方法如下:
filename = Server.MapPath( "index.htm")
6
10.1 FileSystemObject与 File对象返回值视计算机环境的设置而有所不同,例如您的 IIS安装时,主页的目录 (根目录 )按照默认值,设置于 c:\\Inetpub\wwwroot,则以 Server.MapPath取得首页
index.htm的值为 c:\\ Inetpub\wwwroot\index.htm。
io_mode,I/O Mode主要提供用以指定文件访问的方式。
它的值可以是 ForReading(=1) 或 ForAppending(=8)两种选择,若设置为 ForReading,则文件是只读的 (无法进行写入 );而 ForAppending的文件只能从文件末端写入。
此参数可以省略不写,默认值为 ForReading。
AutoCreate:此参数的类型为布尔值 (Boolean)。当值为
True时,若文件不存在,系统会自动产生;若为 False,
且文件不存在时,会出现找不到文件的错误信息 (如下图所示 )。该参数也可省略,省略时默认值为 False。
7
10.1 FileSystemObject与 File对象
8
10.1 FileSystemObject与 File对象
2,CreateTextFile
CreateTextFile 的语法如下:
Set FileObjectName = FileSystemObject.CreateTextFile
( filename,Overwrite)
详细的参数说明如下:
filename:创建的文件名称,可包含磁盘驱动器、目录、
文件名及扩展名。用法与 OpenTextFil相同。
Overwrite:参数为布尔值( True/False)。当值为 True
时,已存在的文件会被强制覆盖( Overwrite);否则会自动创建新文件。本参数可省略,省略时其默认值为 True。
9
10.2 FileSystemObject的其他功能除了 OpenTextFile和 CreateTextFile以外,
FileSystemObject还提供数个针对文件操作的功能,相关说明如下。
1,DeleteFile (删除文件 )
DeleteFile 的参数有两个,第一个为欲删除的文件名,第二个则是设置文件是否强制删除。当第二个参数的值为 True时,不论文件为只读 (ReadOnly) 属性与否,
系统一律删除;若其值为 False且文件为 ReadOnly时,将导致错误。下面是 DeleteFile的范例 (DelF.asp):
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
fso.DeleteFileFileName,True
:
说明:文件 DelF.asp执行后,listconn.bak文件即被删除。
10
10.2 FileSystemObject的其他功能
2,MoveFile (改变文件名 )
改变文件名 (MoveFile)为 FileSystemObject的一个成员。通过 MoveFile,我们可以改变文件的名称,它的使用方法 (范例 MoveF.asp)如下:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName1 = Server.MapPath(“listconn.bak”)
FileName2 = Server.MapPath(“listconn.$$$”)
fso.MoveFileFileName1,FileName2
:
说明:文件 MoveF.asp执行后,listconn.bak文件改名为 listconn.$$$。
11
10.2 FileSystemObject的其他功能
3,FileExists (判断文件是否存在 )
实际上,我们经常会使用到文本文件储存数据。在初次使用该文本文件时,通常文件是不存在的,我们可以使用 CreateTextFile创建文本文件。而当再次使用该文件时 (文件已经产生 ),则我们可以使用 OpenTextFile,并将第二个参数改为 ForAppending 模式,以便我们将数据写入文件尾。产生上述文本文件的范例 ExistsF.asp如下:
const forAppending = 8
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
If fso.FileExists(FileName) Then
Set fp = fso.OpenTextFile(FileName,forAppending,False)
Else
Set fp = fso.CreateTextFile(FileName)
End If
:
12
10.2 FileSystemObject的其他功能上面的写法我们若不用 FileExists方法,也可以采用
OpenTextFile,然后将第二个参数以 forAppending(=8) 及
AutoCreate(=True) 来取代,一样可以完成上述的功能,
而且程序代码更为精简。第二种方法的 ASP程序代码
(NExistsF.asp)如下:
const forAppending = 8
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
Set fp = fso.OpenTextFile(FileName,forAppending,True)
:
13
10.3 File对象的其他功能
File对象的功能并不只是 OpenTextFile及
CreateTextFile两个功能,除此之外还有其他的功能。详细的功能说明如下:
1,AtEndOfStream(判断是否文件尾 )
此属性用以判断是否为文件尾,这也是 File对象最常使用的属性之一。我们可以利用它判断是否已经读到文件尾,若已读到文件尾则不再读取文件内容。下面是显示 listconn.asp源程序 ASP范例
(EndofS.asp):
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile
(Server.MapPath("listconn.asp"))
Do While fp.AtEndOfStream <> True
s = fp.ReadLine?每次读取一条
(行 )数据
Response.Write(Server.
HTMLEncode(s))
If fp.AtEndOfStream <> True
Then
Response.Write,<br>”?HTML
不会自动换行,所以加上换行 Tag
End If
Loop
fp.close '关闭文件
Set fp = Nothing
Set fso = Nothing
14
10.3 File对象的其他功能执行 EndofS.asp后显示 listconn.asp源程序,如下图所示 。
15
10.3 File对象的其他功能
2,ReadLine/WriteLine (读取 /写入一条数据 )
文本文件的特性是数据必须是逐行读取,写入时也一样。读取一行数据的方法是 ReadLine,写入则是
WriteLine。下面是复制文本文件的范例 (ReadW.asp):
<%
Dim s
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fpi = fso.OpenTextFile(Server.MapPath("listconn.asp"))
Set fpo = fso.CreateTextFile(Server.MapPath("listconn1.asp"))
Do While fpi.AtEndOfStream <> True
s = fpi.ReadLine '由 listconn.asp读取一条数据
fpo.WriteLine s '写入一条数据至 listconn1.asp
Loop
fpi.close
fpo.Close
Set fpi = Nothing
Set fpo = Nothing
Set fso = Nothing
%>
说明:文件 listconn.asp
复制完毕,复制后的文件名为 listconn1.asp。
16
10.3 File对象的其他功能上面的范例我们也可以使用 File对象提供的
ReadAll完成,程序代码也最精简 。 但 ReadAll有一个限制,那就是输入文件不能太大,主要是有碍于变量的限制无法一次加载太大的文件 。 改用 ReadAll复制文件的范例 (ReadW1.asp)如下:
<%
Dim s
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fpi = fso.OpenTextFile(Server.MapPath("listconn.asp"))
Set fpo = fso.CreateTextFile(Server.MapPath("listconn1.asp"))
s = fpi.ReadAll '加载 listconn.asp的文件内容
fpo.WriteLine s '将所有数据写入 listconn1.asp
fpi.close
fpo.Close
Set fpi = Nothing
Set fpo = Nothing
Set fso = Nothing
%>
说明:文件 listconn.asp复制完毕,复制后的文件名为 listconn1.asp。
17
10.4 加载 SQL Server连接参数范例在本书的数据库范例中,曾提到 SQL Server的连接参数设置,
最后我们是以 Include File的方式定义 SQL Server连接设置。假设网络公司的管理都 Web化 (或 e化 ),通过网页也可查询 ASP连接 SQL
Server的设置,则我们可以用 OpenTextFile取得相关设置,完整的
ASP范例 (getconn.asp)如下:
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("connect.inc"))
Response.Write("<HTML><BODY>")
Response.Write("<PRE>")
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
ResPonse.Write(Server.HTMLEncode(s))
Loop
Response.Write("</PRE>")
Response.Write("</BODY></HTML>")
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
18
10.4 加载 SQL Server连接参数范例在此 ASP中我们除了访问文本文件的函数以外,我们还使用了一个特殊的技巧 Server.HTMLEncode,将输出至网页的数据先经过
HTMLEncode编码后输出,用以解决 connect.inc文件开头及结尾,包含有控制 ASP执行的开始,<%”及结束,%>”字符,造成 ASP自动解释内容无法在网页输出的困扰。
1,OpenTextFile范例的结果当我们在 Browser上执行上述的程序之后,我们就可以直接在网页上经过查询得知 SQL Server连接的设置,查询的结果如下图所示。
19
10.4 加载 SQL Server连接参数范例请通过 Internet Explorer窗口,点选,文件 /源文件,命令,
我们可以看到 Server.HTMLEncode(s) 所产生的 HTML源文件如下图所示 。
说明:您可以将上述程序代码中 Server.HTMLencode(s) 函数拿掉,直接以变量 S取代,然后再,更新,一次,看看会有何结果? 由于 Server会将 <%… %>之中的文字编译,此时您会发现
Browser中不会显示任何文字 。
20
10.5 编辑 SQL Server连接参数范例看完文件的范例后,为了延续上一个主题,当然创建文件的部分也要做个介绍。接下来我们要利用
CreateTextFile,为您示范如何以 ASP来设置网站连接数据库的参数,让网站的管理完全 e化,提高您的生产力并降低营运成本。设置 SQL Server连接参数的 HTML
网页如下图所示。
21
10.5 编辑 SQL Server连接参数范例当我们连上 edtconn.asp以后,edtconn.asp会自动加载 SQL Server连接参数文件 connect.inc,然后显示在网页上供用户修改。当修正完毕后请按“更新”按钮,
将数据写回连接设置文件,免除日后当 SQL Server改变密码后,我们必须另外修改网页的困扰。
edtconn.asp的运作的流程如下:
( 1)加载 connect.inc的文件内容。
( 2)显示 SQL Server连接设置供用户编辑。
( 3)更新完毕后按下“更新”按钮,回写
connect.inc
便完成任务。
根据上述的流程,我们可以将流程化为程序。
22
10.5 编辑 SQL Server连接参数范例完整的 ASP程序代码 (edtconn.asp)如下:
<%
Dim ConnStr
NL = Chr(13) + Chr(10)? 换行字符
(2 Bytes)
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile
(Server.MapPath("connect.inc"))
Do While fp.AtEndOfStream <> True
connStr = fp.ReadLine
if fp.AtEndOfStream <> True Then
ConnStr = ConnStr + NL
End If
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
<html>
<body>
<form action="wrtconn.asp"
method="post">
<p>SQL Server连接设置,</p>
<p>
<textarea name="Setting" rows=3
cols=92><%=ConnStr%></textarea>
</p>
<center>
<input type="submit" name="send"
value="更新 ">
</center>
</form>
</body>
</html>
23
10.5 编辑 SQL Server连接参数范例执行上述程序代码,当修改完毕后请按,更新,按钮,将数据提交给程序代码 wrtconn.asp写回连接设置文件 (connect.inc)。 为实现该项功能,除了编辑 SQL Server的连接设置以外,当然还要编写,更新,按钮设置的程序,这样才算完成整个编辑操作 。 完整的 ASP更新 SQL Server连接设置的程序代码 wrtconn.asp如下:
<%
Dim ConnStr
NL = Chr(13) + Chr(10)?换行字符
(2 Bytes)
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.CreateTextFile
(Server.MapPath("connect.inc"))
fp.WriteLine Request("Setting")
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
<html>
<body>
SQL Server连接设置,写入成功。
新的设置值如下,<br>
<%=Server.HTMLEncode(Request
("Setting"))%>
<br>
<center>
<a href="javascript:history.go(-1)">
回上一页 </a>
</center>
</body>
</html>
24
10.5 编辑 SQL Server连接参数范例
CreateTextFile执行的结果当我们在浏览器上,按下“刷新”按钮之后,结果并非如预期的可以更新该文件,系统出现“没有使用权限”的错误信息,如右图所示。
发生此错误的原因是 Internet
的用户无权修改 connect.inc文件。
若要开放这一权限我们使用“资源管理器”修改 connect.inc的安全设置,将写入的权限开放给
Internet的用户即可。
25
10.5 编辑 SQL Server连接参数范例
Windows XP Professional默认的 Internet用户的名称为 IUSR_主机名称。例如:主机名称为 DING,则
Internet的用户为 IUSR_DING。
利用“资源管理器”修改 connect.inc,将安全设置写的权利开放给 Internet用户的步骤如下。
操作步骤:
( 1)在 connect.inc文件上,单击鼠标右键,点选“属性”命令。
( 2)出现,connect.inc属性”对话框,如下页图 a所示。单击 按钮,出现“选择用户或组”对话框,
如下页图 b所示。
26
10.5 编辑 SQL Server连接参数范例图 b
图 a
27
10.5 编辑 SQL Server连接参数范例
( 3) 单击 按钮,再单击 按钮,如图 a所示,
选择用户或组名称后,单击 按钮,如图 b所示,然后单击 按钮 。
图 a
图 b
28
10.5 编辑 SQL Server连接参数范例
( 4) 在,connect.inc属性,对话框中,点选用户名称
IUSR_DING,请选中,写入,复选框,然后单击右下角的按钮后,再单击 按钮退出,如下图所示 。
29
10.5 编辑 SQL Server连接参数范例设置完毕后,该文件就具备被写入的权利,此时我们再回到浏览器画面,单击,刷新,按钮,就可以正确地设置 SQL Server
连接参数了 。 正确的执行结果如下图所示 。
说明:将程序 Web化的立意非常好,但是别忘了安全管理的问题 。 因为上网以后,若无适当的安全措施,则网络上的其他人都可以进行维护操作,那 SQL Server不被黑客入侵或破坏才怪 。
因此利用 Web维护网站最好是采用合法 Login的方式进行 。 惟有合法的用户才可以维护此设置,以确保网站的安全 。
30
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
10.6.2 银行存款利率公告范例
31
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例设计动态网页除了使用数据库以外,当然也可以使用文本文件,这尤其是在我们的预算有限,无法购置
Microsoft SQL Server数据库时。除此之外,使用文本文件还有消耗资源小,程序设计门槛低,以及维护简便容易的优点。例如我们有一个介绍图书特别推荐的静态网页,它的 HTML范例 (booklist.htm) 及画面输出如下:
<html>
<head>
<style type="text/css">
<!—
.small { font-family,"宋体 "; font-size,9pt; vertical-align,middle; line-
height:16pt;}
.topic { font-family,"宋体 "; font-size,11pt; vertical-align,middle; line-
height:16pt;}
a:link {color:#0F56A3; font-style:normal; cursor:hand; text-decoration:normal}
32
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
booklist.htm (续 ),
a:visited {color:#0F56A3; font-style:normal; text-decoration:normal}
a:active {color:#0F56A3; font-style:normal; text-decoration:normal}
a:hover {color:#CC0000; font-style:bold; text-decoration:none}
-->
</style>
<title>中国铁道出版社特别推荐 </title>
<meta http-equiv="Content-Type" content="text/html" charset="GB2312">
</head>
<body>
<table border="1" cellspacing="0" cellpadding="1"
bordercolorlight="#dfdfdf" bordercolordark="#ffffff" align="center">
<tr bgcolor="#cccce6">
<td align="center" class="topic" colspan="4" >
中国铁道出版社特别推荐 </td>
</tr>
<tr bgcolor="#e0dcc3" class="small">
<td>序号 </td>
33
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
booklist.htm (续 ),
<td>书名 </td>
<td>读者对象 </td>
<td>出版社 </td>
</tr>
<tr bgcolor="#c8e3e3" class="small">
<td>td-1</td>
<td>Flash5网页高手 -工具与动画篇 </td>
<td>网页制作者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#ffffde" class="small">
<td>td-2</td>
<td>逝去之梦 --3D动画精彩制作 </td>
<td>电脑爱好者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#c8e3e3" class="small">
<td>td-3</td>
<td>JAVA例解教程 </td>
<td>网页制作者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#ffffde" class="small">
<td>td-4</td>
<td>用 BackOffice创建
Intranet/Extranet</td>
<td>网络管理员 </td>
<td>铁道 </td>
</tr>
</table>
<p align="center" class="small">
※ 中国铁道出版社,欢迎读者选购 ※
</p>
</body>
</html>
34
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例执行结果如下图所示。
35
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例当数据有变动时,除非我们编写 ASP 程序将网页数据库化,否则我们必须重新编辑网页,才能维持数据的正确性。若图书特别推荐的数据不是存放在数据库,而采用文本文件的格式存放,通过 ASP 程序的运行,我们同样可以达到动态网页的效果。例如我们将图书数据存放在 booklist.txt文本文件中,如下图所示。
36
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例每一本书以一条数据表示,每个字段间以逗号“,”
隔开,以利用 ASP程序的访问,则我们可以将 HTML表格中的图书数据删除,仅保留一行数据以供 ASP程序套表。例如 BookNo代表图书序号,BookName为书名、
BookAuthor是读者对象,BookPublish为出版社,至于奇数行与偶数行颜色的区分则以 bgc(background color)表示。
套表的格式如下:
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
37
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例现在我们有了 HTML文本文件,也有图书特别推荐的参数文件,接下来就必须编写 ASP程序进行套表的工作。预计程序设计流程如下:
● 设置处理条数的计数器 Cnt
● 打开图书特别推荐的参数文件 booklist.txt
● 读取一条数据,并将 Cnt加 1
● 设置奇数行与偶数行的颜色
● 解析每个字段的内容
● 进行数据套表
● 跳至步骤 3,直到文件处理完毕
● 关闭文件
38
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 设置处理条数的计数器 Cnt
在本例中,奇数行与偶数行显示的颜色不一样,以提供网友较佳的视觉效果,因此作者采用 Cnt为计数器,
记录目前处理的记录编号,计数器的初值为 0。
● 打开图书特别推荐的参数文件使用本章文件对象的 OpenTextFile方法打开参数文件。例如:
Set fso = Server.CreateObject ("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile (Server.MapPath("booklist.txt"))
39
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 读取一条数据,并将 Cnt加 1
在正确打开文件后,我们利用文件对象的 ReadLine方法,读取一条数据至变量 s,并将变量 Cnt加 1。程序代码如下:
s = fp.ReadLine
Cnt = Cnt + 1
当记录编号为奇数时(使用 mod运算),设置变量 bgc的颜色值为,#c8e3e3”,偶数行的颜色为,#ffffde”。程序代码如下:
If Cnt mod 2 = 0 Then
bgc = "#ffffde" '设置偶数行颜色
Else
bgc = "#c8e3e3" '设置奇数行颜色
End If
40
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 解析个别字段的内容由于文本文件中的字段内容是以“,”分隔,因此在我们使用
ReadLine读入数据至变量 s后,我们必须以字符串处理函数 Instr及 Mid
解析 s的内容,将它分解成图书序号 (BookNo)、书名 (BookName)、读者对象 (BookAuthor)及出版社 (BookPublish)等四个字段。其程序代码如下:
p = Instr(s,",") ' 取的 ","的位置
BookNo = Mid(s,1,p-1) ' 取逗号前的字符串 (序号 )
s = mid(s,p+1,Len(s)-p) ' 变量 s重新设为逗号后的字符串
p = Instr(s,",") ' 取的 ","的位置
BookName = Mid(s,1,p-1) ' 取逗号前的字符串 (书名 )
s = mid(s,p+1,Len(s)-p) ' 变量 s重新设为逗号后的字符串
p = Instr(s,",") ' 取的 ","的位置
BookAuthor = Mid(s,1,p-1) ' 取逗号前的字符串 (读者对象 )
s = mid(s,p+1,Len(s)-p) '变量 s重新设为逗号后的字符串
BookPublish = s ' 最后变量 s的值为出版社
41
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 进行数据套表当每一条数据 (变量 s)被解析完毕,并存入相对应的变量后,就可以进行套表的操作。套表的 ASP程序代码如下:
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
● 关闭文件当文件处理完毕,必须将文件关闭并将资源释放。其程序代码如下:
fp.close
Set fp = Nothing
Set fso = Nothing
42
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 执行结果当 ASP程序 (booklist.asp)完成后,请将其与 booklist.txt参数文件置于同一目录下,然后执行 booklist.asp。完整的程序代码 (booklist.asp)
如下。
<html>
<head>
<style type="text/css">
<!--
.small { font-family,"宋体 "; font-size,9pt; vertical-align,middle; line-height:16pt;}
.topic { font-family,"宋体 "; font-size,11pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3; font-style:normal; cursor:hand; text-decoration:normal}
a:visited {color:#0F56A3; font-style:normal; text-decoration:normal}
a:active {color:#0F56A3; font-style:normal; text-decoration:normal}
a:hover {color:#CC0000; font-style:bold; text-decoration:none}
-->
</style>
43
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
<title>中国铁道出版社特别推荐 </title>
<meta http-equiv="Content-Type" content="text/html" charset="GB2312">
</head>
<body>
<table border="1" cellspacing="0" cellpadding="1"
bordercolorlight="#dfdfdf" bordercolordark="#ffffff" align="center">
<tr bgcolor="#cccce6">
<td align="center" class="topic" colspan="4" >
中国铁道出版社特别推荐 </td>
</tr>
<tr bgcolor="#e0dcc3" class="small">
<td>序号 </td>
<td>书名 </td>
<td>读者对象 </td>
<td>出版社 </td>
</tr>
<%
44
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("booklist.txt"))
Cnt = 0
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
Cnt = Cnt + 1
If Cnt mod 2 = 0 Then
bgc = "#ffffde"
Else
bgc = "#c8e3e3"
End If
p = Instr(s,",")
BookNo = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
p = Instr(s,",")
BookName = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
45
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
p = Instr(s,",")
BookAuthor = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
BookPublish = s
%>
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
<%
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
</table>
<p align="center"
class="small">
※ 中国铁道出版社,
欢迎读者选购 ※
</p>
</body>
</html>
46
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例执行结果如下图所示。
47
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例通常在银行的大厅都会有一块存款利率公告表,
公告银行最新的存款利率。下面是某银行 1989年 11月
30 日的存款利率公告及静态的 HTML源代码,下图是公告界面。
48
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例其完整的程序代码 (rateaffi.htm)如下:
<HTML>
<HEAD>
<style type="text/css">
<!--
.topic { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,11pt; vertical-align,middle; line-height:16pt;}
.small { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,9pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3;font-style:normal;cursor:hand;text-decoration:normal}
a:visited {color:#0F56A3;font-style:normal;text-decoration:normal}
a:active {color:#0F56A3;font-style:normal;text-decoration:normal}
a:hover {color:#CC0000;font-style:bold;text-decoration:none}
-->
</style>
<TITLE>利率查询 </TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html,charset="GB2312">
49
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
</HEAD>
<BODY bgcolor="#FFFFFF">
<center class=topic>
某某银行 XX币存款利率表
<hr width="270">
<table border="1" cellspacing="0" cellpadding="0"
bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF,bgcolor="#F2FDFD">
<tr>
<td colspan=4 align="center" class=topic bgcolor="#FFEFBF">
公告日期,89/11/30</td>
</tr>
<tr bgcolor="#FFEFBF" align="center" class=topic>
<td>科目名称 </td>
<td>期别 </td>
<td>活期利率 </td>
<td>定期利率 </td>
</tr>
50
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
<tr bgcolor="#eaeaf4" class=small>
<td align=left >活期存款 </td>
<td align=right>--</td>
<td align=right>1.7500%</td>
<td align=right>--</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >活期储蓄存款 </td>
<td align=right>--</td>
<td align=right>4.1000%</td>
<td align=right>--</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1个月 </td>
<td align=right>4.5000%</td>
<td align=right>4.4000%</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>3个月 </td>
<td align=right>4.7500%</td>
<td align=right>4.7000%</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>6个月 </td>
<td align=right>4.9000%</td>
<td align=right>4.9000%</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>9个月 </td>
<td align=right>5.0000%</td>
51
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
<td align=right>5.0000%</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1年 </td>
<td align=right>5.1500%</td>
<td align=right>5.2000%</td>
</tr>
</table>
</center>
<center class=small>
<hr width="270">
※ 以上仅供参考,实际利率以交易当时利率为准 ※
</center>
<center class=small>※ 您若有任何问题,
请洽询本行各地分行 ※ </center>
<p align=center class=small>
<a href="http://www.hlfjob.com.cn">首页 </a> |
<a href="http://www.hlfjob.com.cn/
newbook01.htm">最新书讯 </a> |
<a href="http://www.hlfjob.com.cn/
cdmenu01.htm">教学光盘 </a> |
<a href="http://www.hlfjob.com.cn">
hlfjob人才求职网 </a> |
<a href="mailto:service@hlfjob
.com.cn">服务信箱 </a>
</p>
</BODY>
</HTML>
52
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例在本范例中,同样采用文本文件存放利率相关参数。但是文本文件采用固定字段格式,示范如何将
HTML与固定格式的文本文件合并输出。本范例的架构如下图所示。
从图的结构中,我们可以看出此范例需要三个文件,分别是
HTML模板文件、参数文件以及 ASP程序代码。
53
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
1,HTML模板文件以静态 HTML源代码为基础,将活期利率及定期利率的信息删除,改为模板变量,变量名称以不和其他 HTML源代码冲突为原则。
例如本例中的 #11#代表活期存款活期利率,#12#为活期存款定期利率,模板文件的 HTML源代码 (rate.dwt)如下:
<HTML>
<HEAD>
<style type="text/css">
<!--
.topic { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,11pt; vertical-align,middle; line-height:16pt;}
.small { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,9pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3;font-style:normal;cursor:hand;text-decoration:normal}
a:visited {color:#0F56A3;font-style:normal;text-decoration:normal}
a:active {color:#0F56A3;font-style:normal;text-decoration:normal}
a:hover {color:#CC0000;font-style:bold;text-decoration:none}
54
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
-->
</style>
<!-- TemplateBeginEditable name="doctitle" -->
<TITLE>利率查询 </TITLE>
<!-- TemplateEndEditable -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html,
charset="GB2312">
<!-- TemplateBeginEditable name="head" --><!-- TemplateEndEditable -->
</HEAD>
<BODY bgcolor="#FFFFFF">
<center class=topic>
某某银行 XX币存款利率表
<hr width="270">
<table border="1" cellspacing="0" cellpadding="0"
bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF“
bgcolor="#F2FDFD">
<tr>
<td colspan=4 align="center" class=topic bgcolor="#FFEFBF">
公告日期,89/11/30</td>
55
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
</tr>
<tr bgcolor="#FFEFBF" align="center“
class=topic>
<td>科目名称 </td>
<td>期别 </td>
<td>活期利率 </td>
<td>定期利率 </td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >活期存款 </td>
<td align=right>--</td>
<td align=right>#11#</td>
<td align=right>#12#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >活期储蓄存款 </td>
<td align=right>--</td>
<td align=right>#21#</td>
<td align=right>#22#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1个月 </td>
<td align=right>#31#</td>
<td align=right>#32#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>3个月 </td>
<td align=right>#41#</td>
<td align=right>#42#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>6个月 </td>
<td align=right>#51#</td>
56
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
<td align=right>#52#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>9个月 </td>
<td align=right>#61#</td>
<td align=right>#62#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1年 </td>
<td align=right>#71#</td>
<td align=right>#72#</td>
</tr>
</table>
</center>
<center class=small>
<hr width="270">
※ 以上仅供参考,实际利率以交易当时利率为准 ※
</center>
<center class=small>※ 您若有任何问题,
请洽询本行各地分行 ※ </center>
<p align=center class=small>
<a href="http://www.hlfjob.com.cn">首页 </a> |
<a href="http://www.hlfjob.com.cn/
newbook01.htm">最新书讯 </a> |
<a href="http://www.hlfjob.com.cn/
cdmenu01.htm">教学光盘 </a> |
<a href="http://www.hlfjob.com.cn">
hlfjob人才求职网 </a> |
<a href="mailto:service@hlfjob.com.cn">
服务信箱 </a>
</p>
</BODY>
</HTML>
57
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
2,参数文件为方便程序设计起见,参数文件的设计与模板文件必须互相搭配,因此我们在参数文件的每一组数据前安插一个变量 (与模板文件对应 ),如下图所示。
58
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码现在我们有了 HTML模板文件,也有利率的参数文件,接下来就必须编写 ASP程序进行套表的工作。预计程序设计流程如下:
( 1)加载模板文件 (rate.dwt)到变量 template
( 2)打开利率参数文件 rate.txt
( 3)读取一条数据
( 4)取得第一及第二个字段的变量名称和内容
( 5)取代模板文件的变量
( 6)跳至步骤 3,直到文件处理完毕
( 7)关闭文件
59
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 加载模板文件 (rate.dwt)至变量 template
在本例中,我们使用文件对象的 ReadAll方法加载模板文件至变量 template。加载的程序代码如下:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.dwt"))
template = fp.ReadAll ' 加载 HTML模板文件 rate.dwt
fp.close
Set fp = Nothing
Set fso = Nothing
60
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 打开利率参数文件 rate.txt
使用文件对象的 OpenTextFile方法打开参数文件。例如:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.txt"))
● 读取一条数据在正确打开文件后,我们利用文件对象的 ReadLine方法,读取一条数据至变量 s。其程序代码如下:
s = fp.ReadLine
61
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 取得第一及第二个字段的变量名称和内容本参数文件为固定格式,因此我们使用 Mid 函数直接解析变量 s的内容至 fd1,fv1,fd2,fv2,其中 fd1代表第一个字段的变量名称 (Field 1),fv1则是字段的值 (Field Value 1),以此类推。解析的程序代码如下:
fd1 = Mid(s,1,4) '取得模板变量,例 #11#
fv1 = Mid(s,5,8) '取得模板变量的值,例 1.7500%
fd2 = Mid(s,14,4) '取得模板变量,例 #12#
fv2 = Mid(s,18,8) '取得模板变量的值,例 --
62
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 替代模板文件的变量在 ASP的字符串函数中,Replace函数具有替代字符串的能力,
因此我们将它用在本范例中,以更换模板文件中的活期利率及定期利率的值。当数据逐条被读入并被解析完毕,存入相对应的变量后,
就可以进行取代模板变量的操作。其用法如下:
template = Replace(template,fd1,fv1) ' 替换模板中的变量 #11#,..
template = Replace(template,fd2,fv2) ' 替换模板中的变量 #12#,.,
63
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 关闭文件当文件处理完毕,必须将文件关闭并将资源释放。其程序代码如下:
fp.close
Set fp = Nothing
Set fso = Nothing
● 执行结果当 ASP程序 (rate.asp)完成后,请将其与 rate.dwt 模板文件及
rate.txt参数文件置于同一目录下,然后执行 rate.asp。
64
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果完整的程序代码 rate.asp如下,
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.dwt"))
template = fp.ReadAll ' 加载 HTML模板文件 rate.dwt
fp.close
Set fp = Nothing
Set fso = Nothing
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.txt"))
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
65
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果完整的程序代码 rate.asp(续 )如下,
fd1 = Mid(s,1,4) '取得模板变量,例 #11#
fv1 = Mid(s,5,8) '取得模板变量的值,例 1.7500%
fd2 = Mid(s,14,4) '取得模板变量,例 #12#
fv2 = Mid(s,18,8) '取得模板变量的值,例 --
template = Replace(template,fd1,fv1) ' 替换模板中的变量 #11#,..
template = Replace(template,fd2,fv2) ' 替换模板中的变量 #12#,..
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
Response.Write(template) ' 显示合并后的结果
%>
66
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果执行结果如右图所示。
连续介绍两种文本文件套表的方法,不知道您喜欢哪一种。
第一种方法将 HTML与 ASP写在同一个文件中,在维护及管理上比较方便,第二种方法则是程序代码比较简洁,没有繁琐的
HTML和参数文件的牵绊。
67
第 10章 文本文件的访问看完文本文件的访问,相信以作者所举的范例来看,
应足以涵盖初学者及较高级的所有的运用,接下来就看读者您是否能举一反三。
看完本章您有什么感想呢? 或许您已经觉得 ASP真的很好,真的没有任何问题能够难倒它。
68
第 10章 文本文件的访问
习题
1,请利用记事本将邮政编码对照表建立文件 (格式如下 ),然后试着利用 ASP将此文本文件转入数据库。
100南海市和平区
101南海市
.
.
.
306海成县海边乡
2,请自行练习将 SQL Server的北风 (Northwind)数据库转成以逗号分隔的文本文件,文本文件名可由
HTML中设置。
ASP动态网页设计教程
2
第 10章 文本文件的访问标准的 HTML并没有提供文件访问的能力,因此若有文件访问的需求时就必须通过 CGI程序访问服务器上的文件。在 ASP程序中,要访问 Server上的文件必须先创建 FileSystemObject对象,然后利用此对象所提供的
OpenTextFile(打开文件 )或 CreateTextFile(创建新文件 )创建 File对象,最后调用 File对象的 Write Line及 Read Line
访问文件。
文本文件虽可以通过 ASP访问,但必须注意文件访问权限的问题。若目录或文件没有写入的权限时,
Internet的用户仍然无法写入数据,只有通过“资源管理器”的“安全设置”,将文件写入的权限开放,方能使用创建文件及写入文件的功能。
3
第 10章 文本文件的访问本章将针对文本文件的访问,介绍 ASP提供的文本文件访问功能及使用权限问题,并以 SQL Server连接参数设置的范例,介绍以 Web接口管理 SQL Server
的应用。
10.1 FileSystemObject与 File对象
10.2 FileSystemObject的其他功能
10.3 File对象的其他功能
10.4 加载 SQL Server连接参数范例
10.5 编辑 SQL Server连接参数范例
10.6 HTML套用文本文件范例
4
10.1 FileSystemObject与 File对象
ASP无法完成的操作,Microsoft主张利用 COM来解决。 FileSystemObject是利用 COM写成的组件,它提供文本文件访问的能力。通过 FileSystemObject我们可以弥补 ASP无法访问文本文件的遗憾,完成网站上各种可能发生的情况。创建 FileSystemObject的 ASP程序代码如下:
Set fso= Server.CreateObject("Scripting.FileSystemObject")
Set fp= fso.OpeoTextFile( "文件名称 ")
或
Set fso= Server.CreateObject("Scripting.FileSystemObject")
Set fp= fso.CreateTextFile( "文件名称 ")
5
10.1 FileSystemObject与 File对象上述的程序代码在创建 FileSystemObject之后,可搭配 OpenTextFile及 CreateTextFile两个方法创建 File对象。有关这两个对象的使用方法说明如下。
1,OpenTextFile
OpenTextFile 的语法如下:
Set FileObjectName = FileSystemObject.OpenTextFile
( filename,io_mode,AutoCreate)
Filename:打开的文件名称,可包含磁盘驱动器、目录、文件名及扩展名。另外,您也可以使用 Server对象的 MapPath方法取得文件所在位置,例如取得网页
index.htm完整路径的方法如下:
filename = Server.MapPath( "index.htm")
6
10.1 FileSystemObject与 File对象返回值视计算机环境的设置而有所不同,例如您的 IIS安装时,主页的目录 (根目录 )按照默认值,设置于 c:\\Inetpub\wwwroot,则以 Server.MapPath取得首页
index.htm的值为 c:\\ Inetpub\wwwroot\index.htm。
io_mode,I/O Mode主要提供用以指定文件访问的方式。
它的值可以是 ForReading(=1) 或 ForAppending(=8)两种选择,若设置为 ForReading,则文件是只读的 (无法进行写入 );而 ForAppending的文件只能从文件末端写入。
此参数可以省略不写,默认值为 ForReading。
AutoCreate:此参数的类型为布尔值 (Boolean)。当值为
True时,若文件不存在,系统会自动产生;若为 False,
且文件不存在时,会出现找不到文件的错误信息 (如下图所示 )。该参数也可省略,省略时默认值为 False。
7
10.1 FileSystemObject与 File对象
8
10.1 FileSystemObject与 File对象
2,CreateTextFile
CreateTextFile 的语法如下:
Set FileObjectName = FileSystemObject.CreateTextFile
( filename,Overwrite)
详细的参数说明如下:
filename:创建的文件名称,可包含磁盘驱动器、目录、
文件名及扩展名。用法与 OpenTextFil相同。
Overwrite:参数为布尔值( True/False)。当值为 True
时,已存在的文件会被强制覆盖( Overwrite);否则会自动创建新文件。本参数可省略,省略时其默认值为 True。
9
10.2 FileSystemObject的其他功能除了 OpenTextFile和 CreateTextFile以外,
FileSystemObject还提供数个针对文件操作的功能,相关说明如下。
1,DeleteFile (删除文件 )
DeleteFile 的参数有两个,第一个为欲删除的文件名,第二个则是设置文件是否强制删除。当第二个参数的值为 True时,不论文件为只读 (ReadOnly) 属性与否,
系统一律删除;若其值为 False且文件为 ReadOnly时,将导致错误。下面是 DeleteFile的范例 (DelF.asp):
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
fso.DeleteFileFileName,True
:
说明:文件 DelF.asp执行后,listconn.bak文件即被删除。
10
10.2 FileSystemObject的其他功能
2,MoveFile (改变文件名 )
改变文件名 (MoveFile)为 FileSystemObject的一个成员。通过 MoveFile,我们可以改变文件的名称,它的使用方法 (范例 MoveF.asp)如下:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName1 = Server.MapPath(“listconn.bak”)
FileName2 = Server.MapPath(“listconn.$$$”)
fso.MoveFileFileName1,FileName2
:
说明:文件 MoveF.asp执行后,listconn.bak文件改名为 listconn.$$$。
11
10.2 FileSystemObject的其他功能
3,FileExists (判断文件是否存在 )
实际上,我们经常会使用到文本文件储存数据。在初次使用该文本文件时,通常文件是不存在的,我们可以使用 CreateTextFile创建文本文件。而当再次使用该文件时 (文件已经产生 ),则我们可以使用 OpenTextFile,并将第二个参数改为 ForAppending 模式,以便我们将数据写入文件尾。产生上述文本文件的范例 ExistsF.asp如下:
const forAppending = 8
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
If fso.FileExists(FileName) Then
Set fp = fso.OpenTextFile(FileName,forAppending,False)
Else
Set fp = fso.CreateTextFile(FileName)
End If
:
12
10.2 FileSystemObject的其他功能上面的写法我们若不用 FileExists方法,也可以采用
OpenTextFile,然后将第二个参数以 forAppending(=8) 及
AutoCreate(=True) 来取代,一样可以完成上述的功能,
而且程序代码更为精简。第二种方法的 ASP程序代码
(NExistsF.asp)如下:
const forAppending = 8
Set fso = Server.CreateObject("Scripting.FileSystemObject")
FileName = Server.MapPath("listconn.bak")
Set fp = fso.OpenTextFile(FileName,forAppending,True)
:
13
10.3 File对象的其他功能
File对象的功能并不只是 OpenTextFile及
CreateTextFile两个功能,除此之外还有其他的功能。详细的功能说明如下:
1,AtEndOfStream(判断是否文件尾 )
此属性用以判断是否为文件尾,这也是 File对象最常使用的属性之一。我们可以利用它判断是否已经读到文件尾,若已读到文件尾则不再读取文件内容。下面是显示 listconn.asp源程序 ASP范例
(EndofS.asp):
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile
(Server.MapPath("listconn.asp"))
Do While fp.AtEndOfStream <> True
s = fp.ReadLine?每次读取一条
(行 )数据
Response.Write(Server.
HTMLEncode(s))
If fp.AtEndOfStream <> True
Then
Response.Write,<br>”?HTML
不会自动换行,所以加上换行 Tag
End If
Loop
fp.close '关闭文件
Set fp = Nothing
Set fso = Nothing
14
10.3 File对象的其他功能执行 EndofS.asp后显示 listconn.asp源程序,如下图所示 。
15
10.3 File对象的其他功能
2,ReadLine/WriteLine (读取 /写入一条数据 )
文本文件的特性是数据必须是逐行读取,写入时也一样。读取一行数据的方法是 ReadLine,写入则是
WriteLine。下面是复制文本文件的范例 (ReadW.asp):
<%
Dim s
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fpi = fso.OpenTextFile(Server.MapPath("listconn.asp"))
Set fpo = fso.CreateTextFile(Server.MapPath("listconn1.asp"))
Do While fpi.AtEndOfStream <> True
s = fpi.ReadLine '由 listconn.asp读取一条数据
fpo.WriteLine s '写入一条数据至 listconn1.asp
Loop
fpi.close
fpo.Close
Set fpi = Nothing
Set fpo = Nothing
Set fso = Nothing
%>
说明:文件 listconn.asp
复制完毕,复制后的文件名为 listconn1.asp。
16
10.3 File对象的其他功能上面的范例我们也可以使用 File对象提供的
ReadAll完成,程序代码也最精简 。 但 ReadAll有一个限制,那就是输入文件不能太大,主要是有碍于变量的限制无法一次加载太大的文件 。 改用 ReadAll复制文件的范例 (ReadW1.asp)如下:
<%
Dim s
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fpi = fso.OpenTextFile(Server.MapPath("listconn.asp"))
Set fpo = fso.CreateTextFile(Server.MapPath("listconn1.asp"))
s = fpi.ReadAll '加载 listconn.asp的文件内容
fpo.WriteLine s '将所有数据写入 listconn1.asp
fpi.close
fpo.Close
Set fpi = Nothing
Set fpo = Nothing
Set fso = Nothing
%>
说明:文件 listconn.asp复制完毕,复制后的文件名为 listconn1.asp。
17
10.4 加载 SQL Server连接参数范例在本书的数据库范例中,曾提到 SQL Server的连接参数设置,
最后我们是以 Include File的方式定义 SQL Server连接设置。假设网络公司的管理都 Web化 (或 e化 ),通过网页也可查询 ASP连接 SQL
Server的设置,则我们可以用 OpenTextFile取得相关设置,完整的
ASP范例 (getconn.asp)如下:
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("connect.inc"))
Response.Write("<HTML><BODY>")
Response.Write("<PRE>")
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
ResPonse.Write(Server.HTMLEncode(s))
Loop
Response.Write("</PRE>")
Response.Write("</BODY></HTML>")
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
18
10.4 加载 SQL Server连接参数范例在此 ASP中我们除了访问文本文件的函数以外,我们还使用了一个特殊的技巧 Server.HTMLEncode,将输出至网页的数据先经过
HTMLEncode编码后输出,用以解决 connect.inc文件开头及结尾,包含有控制 ASP执行的开始,<%”及结束,%>”字符,造成 ASP自动解释内容无法在网页输出的困扰。
1,OpenTextFile范例的结果当我们在 Browser上执行上述的程序之后,我们就可以直接在网页上经过查询得知 SQL Server连接的设置,查询的结果如下图所示。
19
10.4 加载 SQL Server连接参数范例请通过 Internet Explorer窗口,点选,文件 /源文件,命令,
我们可以看到 Server.HTMLEncode(s) 所产生的 HTML源文件如下图所示 。
说明:您可以将上述程序代码中 Server.HTMLencode(s) 函数拿掉,直接以变量 S取代,然后再,更新,一次,看看会有何结果? 由于 Server会将 <%… %>之中的文字编译,此时您会发现
Browser中不会显示任何文字 。
20
10.5 编辑 SQL Server连接参数范例看完文件的范例后,为了延续上一个主题,当然创建文件的部分也要做个介绍。接下来我们要利用
CreateTextFile,为您示范如何以 ASP来设置网站连接数据库的参数,让网站的管理完全 e化,提高您的生产力并降低营运成本。设置 SQL Server连接参数的 HTML
网页如下图所示。
21
10.5 编辑 SQL Server连接参数范例当我们连上 edtconn.asp以后,edtconn.asp会自动加载 SQL Server连接参数文件 connect.inc,然后显示在网页上供用户修改。当修正完毕后请按“更新”按钮,
将数据写回连接设置文件,免除日后当 SQL Server改变密码后,我们必须另外修改网页的困扰。
edtconn.asp的运作的流程如下:
( 1)加载 connect.inc的文件内容。
( 2)显示 SQL Server连接设置供用户编辑。
( 3)更新完毕后按下“更新”按钮,回写
connect.inc
便完成任务。
根据上述的流程,我们可以将流程化为程序。
22
10.5 编辑 SQL Server连接参数范例完整的 ASP程序代码 (edtconn.asp)如下:
<%
Dim ConnStr
NL = Chr(13) + Chr(10)? 换行字符
(2 Bytes)
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile
(Server.MapPath("connect.inc"))
Do While fp.AtEndOfStream <> True
connStr = fp.ReadLine
if fp.AtEndOfStream <> True Then
ConnStr = ConnStr + NL
End If
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
<html>
<body>
<form action="wrtconn.asp"
method="post">
<p>SQL Server连接设置,</p>
<p>
<textarea name="Setting" rows=3
cols=92><%=ConnStr%></textarea>
</p>
<center>
<input type="submit" name="send"
value="更新 ">
</center>
</form>
</body>
</html>
23
10.5 编辑 SQL Server连接参数范例执行上述程序代码,当修改完毕后请按,更新,按钮,将数据提交给程序代码 wrtconn.asp写回连接设置文件 (connect.inc)。 为实现该项功能,除了编辑 SQL Server的连接设置以外,当然还要编写,更新,按钮设置的程序,这样才算完成整个编辑操作 。 完整的 ASP更新 SQL Server连接设置的程序代码 wrtconn.asp如下:
<%
Dim ConnStr
NL = Chr(13) + Chr(10)?换行字符
(2 Bytes)
Set fso = Server.CreateObject
("Scripting.FileSystemObject")
Set fp = fso.CreateTextFile
(Server.MapPath("connect.inc"))
fp.WriteLine Request("Setting")
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
<html>
<body>
SQL Server连接设置,写入成功。
新的设置值如下,<br>
<%=Server.HTMLEncode(Request
("Setting"))%>
<br>
<center>
<a href="javascript:history.go(-1)">
回上一页 </a>
</center>
</body>
</html>
24
10.5 编辑 SQL Server连接参数范例
CreateTextFile执行的结果当我们在浏览器上,按下“刷新”按钮之后,结果并非如预期的可以更新该文件,系统出现“没有使用权限”的错误信息,如右图所示。
发生此错误的原因是 Internet
的用户无权修改 connect.inc文件。
若要开放这一权限我们使用“资源管理器”修改 connect.inc的安全设置,将写入的权限开放给
Internet的用户即可。
25
10.5 编辑 SQL Server连接参数范例
Windows XP Professional默认的 Internet用户的名称为 IUSR_主机名称。例如:主机名称为 DING,则
Internet的用户为 IUSR_DING。
利用“资源管理器”修改 connect.inc,将安全设置写的权利开放给 Internet用户的步骤如下。
操作步骤:
( 1)在 connect.inc文件上,单击鼠标右键,点选“属性”命令。
( 2)出现,connect.inc属性”对话框,如下页图 a所示。单击 按钮,出现“选择用户或组”对话框,
如下页图 b所示。
26
10.5 编辑 SQL Server连接参数范例图 b
图 a
27
10.5 编辑 SQL Server连接参数范例
( 3) 单击 按钮,再单击 按钮,如图 a所示,
选择用户或组名称后,单击 按钮,如图 b所示,然后单击 按钮 。
图 a
图 b
28
10.5 编辑 SQL Server连接参数范例
( 4) 在,connect.inc属性,对话框中,点选用户名称
IUSR_DING,请选中,写入,复选框,然后单击右下角的按钮后,再单击 按钮退出,如下图所示 。
29
10.5 编辑 SQL Server连接参数范例设置完毕后,该文件就具备被写入的权利,此时我们再回到浏览器画面,单击,刷新,按钮,就可以正确地设置 SQL Server
连接参数了 。 正确的执行结果如下图所示 。
说明:将程序 Web化的立意非常好,但是别忘了安全管理的问题 。 因为上网以后,若无适当的安全措施,则网络上的其他人都可以进行维护操作,那 SQL Server不被黑客入侵或破坏才怪 。
因此利用 Web维护网站最好是采用合法 Login的方式进行 。 惟有合法的用户才可以维护此设置,以确保网站的安全 。
30
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
10.6.2 银行存款利率公告范例
31
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例设计动态网页除了使用数据库以外,当然也可以使用文本文件,这尤其是在我们的预算有限,无法购置
Microsoft SQL Server数据库时。除此之外,使用文本文件还有消耗资源小,程序设计门槛低,以及维护简便容易的优点。例如我们有一个介绍图书特别推荐的静态网页,它的 HTML范例 (booklist.htm) 及画面输出如下:
<html>
<head>
<style type="text/css">
<!—
.small { font-family,"宋体 "; font-size,9pt; vertical-align,middle; line-
height:16pt;}
.topic { font-family,"宋体 "; font-size,11pt; vertical-align,middle; line-
height:16pt;}
a:link {color:#0F56A3; font-style:normal; cursor:hand; text-decoration:normal}
32
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
booklist.htm (续 ),
a:visited {color:#0F56A3; font-style:normal; text-decoration:normal}
a:active {color:#0F56A3; font-style:normal; text-decoration:normal}
a:hover {color:#CC0000; font-style:bold; text-decoration:none}
-->
</style>
<title>中国铁道出版社特别推荐 </title>
<meta http-equiv="Content-Type" content="text/html" charset="GB2312">
</head>
<body>
<table border="1" cellspacing="0" cellpadding="1"
bordercolorlight="#dfdfdf" bordercolordark="#ffffff" align="center">
<tr bgcolor="#cccce6">
<td align="center" class="topic" colspan="4" >
中国铁道出版社特别推荐 </td>
</tr>
<tr bgcolor="#e0dcc3" class="small">
<td>序号 </td>
33
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
booklist.htm (续 ),
<td>书名 </td>
<td>读者对象 </td>
<td>出版社 </td>
</tr>
<tr bgcolor="#c8e3e3" class="small">
<td>td-1</td>
<td>Flash5网页高手 -工具与动画篇 </td>
<td>网页制作者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#ffffde" class="small">
<td>td-2</td>
<td>逝去之梦 --3D动画精彩制作 </td>
<td>电脑爱好者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#c8e3e3" class="small">
<td>td-3</td>
<td>JAVA例解教程 </td>
<td>网页制作者 </td>
<td>铁道 </td>
</tr>
<tr bgcolor="#ffffde" class="small">
<td>td-4</td>
<td>用 BackOffice创建
Intranet/Extranet</td>
<td>网络管理员 </td>
<td>铁道 </td>
</tr>
</table>
<p align="center" class="small">
※ 中国铁道出版社,欢迎读者选购 ※
</p>
</body>
</html>
34
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例执行结果如下图所示。
35
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例当数据有变动时,除非我们编写 ASP 程序将网页数据库化,否则我们必须重新编辑网页,才能维持数据的正确性。若图书特别推荐的数据不是存放在数据库,而采用文本文件的格式存放,通过 ASP 程序的运行,我们同样可以达到动态网页的效果。例如我们将图书数据存放在 booklist.txt文本文件中,如下图所示。
36
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例每一本书以一条数据表示,每个字段间以逗号“,”
隔开,以利用 ASP程序的访问,则我们可以将 HTML表格中的图书数据删除,仅保留一行数据以供 ASP程序套表。例如 BookNo代表图书序号,BookName为书名、
BookAuthor是读者对象,BookPublish为出版社,至于奇数行与偶数行颜色的区分则以 bgc(background color)表示。
套表的格式如下:
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
37
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例现在我们有了 HTML文本文件,也有图书特别推荐的参数文件,接下来就必须编写 ASP程序进行套表的工作。预计程序设计流程如下:
● 设置处理条数的计数器 Cnt
● 打开图书特别推荐的参数文件 booklist.txt
● 读取一条数据,并将 Cnt加 1
● 设置奇数行与偶数行的颜色
● 解析每个字段的内容
● 进行数据套表
● 跳至步骤 3,直到文件处理完毕
● 关闭文件
38
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 设置处理条数的计数器 Cnt
在本例中,奇数行与偶数行显示的颜色不一样,以提供网友较佳的视觉效果,因此作者采用 Cnt为计数器,
记录目前处理的记录编号,计数器的初值为 0。
● 打开图书特别推荐的参数文件使用本章文件对象的 OpenTextFile方法打开参数文件。例如:
Set fso = Server.CreateObject ("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile (Server.MapPath("booklist.txt"))
39
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 读取一条数据,并将 Cnt加 1
在正确打开文件后,我们利用文件对象的 ReadLine方法,读取一条数据至变量 s,并将变量 Cnt加 1。程序代码如下:
s = fp.ReadLine
Cnt = Cnt + 1
当记录编号为奇数时(使用 mod运算),设置变量 bgc的颜色值为,#c8e3e3”,偶数行的颜色为,#ffffde”。程序代码如下:
If Cnt mod 2 = 0 Then
bgc = "#ffffde" '设置偶数行颜色
Else
bgc = "#c8e3e3" '设置奇数行颜色
End If
40
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 解析个别字段的内容由于文本文件中的字段内容是以“,”分隔,因此在我们使用
ReadLine读入数据至变量 s后,我们必须以字符串处理函数 Instr及 Mid
解析 s的内容,将它分解成图书序号 (BookNo)、书名 (BookName)、读者对象 (BookAuthor)及出版社 (BookPublish)等四个字段。其程序代码如下:
p = Instr(s,",") ' 取的 ","的位置
BookNo = Mid(s,1,p-1) ' 取逗号前的字符串 (序号 )
s = mid(s,p+1,Len(s)-p) ' 变量 s重新设为逗号后的字符串
p = Instr(s,",") ' 取的 ","的位置
BookName = Mid(s,1,p-1) ' 取逗号前的字符串 (书名 )
s = mid(s,p+1,Len(s)-p) ' 变量 s重新设为逗号后的字符串
p = Instr(s,",") ' 取的 ","的位置
BookAuthor = Mid(s,1,p-1) ' 取逗号前的字符串 (读者对象 )
s = mid(s,p+1,Len(s)-p) '变量 s重新设为逗号后的字符串
BookPublish = s ' 最后变量 s的值为出版社
41
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 进行数据套表当每一条数据 (变量 s)被解析完毕,并存入相对应的变量后,就可以进行套表的操作。套表的 ASP程序代码如下:
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
● 关闭文件当文件处理完毕,必须将文件关闭并将资源释放。其程序代码如下:
fp.close
Set fp = Nothing
Set fso = Nothing
42
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例
● 执行结果当 ASP程序 (booklist.asp)完成后,请将其与 booklist.txt参数文件置于同一目录下,然后执行 booklist.asp。完整的程序代码 (booklist.asp)
如下。
<html>
<head>
<style type="text/css">
<!--
.small { font-family,"宋体 "; font-size,9pt; vertical-align,middle; line-height:16pt;}
.topic { font-family,"宋体 "; font-size,11pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3; font-style:normal; cursor:hand; text-decoration:normal}
a:visited {color:#0F56A3; font-style:normal; text-decoration:normal}
a:active {color:#0F56A3; font-style:normal; text-decoration:normal}
a:hover {color:#CC0000; font-style:bold; text-decoration:none}
-->
</style>
43
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
<title>中国铁道出版社特别推荐 </title>
<meta http-equiv="Content-Type" content="text/html" charset="GB2312">
</head>
<body>
<table border="1" cellspacing="0" cellpadding="1"
bordercolorlight="#dfdfdf" bordercolordark="#ffffff" align="center">
<tr bgcolor="#cccce6">
<td align="center" class="topic" colspan="4" >
中国铁道出版社特别推荐 </td>
</tr>
<tr bgcolor="#e0dcc3" class="small">
<td>序号 </td>
<td>书名 </td>
<td>读者对象 </td>
<td>出版社 </td>
</tr>
<%
44
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("booklist.txt"))
Cnt = 0
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
Cnt = Cnt + 1
If Cnt mod 2 = 0 Then
bgc = "#ffffde"
Else
bgc = "#c8e3e3"
End If
p = Instr(s,",")
BookNo = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
p = Instr(s,",")
BookName = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
45
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例完整的程序代码 booklist.asp (续 )如下。
p = Instr(s,",")
BookAuthor = Mid(s,1,p-1)
s = mid(s,p+1,Len(s)-p)
BookPublish = s
%>
<tr bgcolor="<%=bgc%>" class="small">
<td><%=BookNo%></td>
<td><%=BookName%></td>
<td><%=BookAuthor%></td>
<td><%=BookPublish%></td>
</tr>
<%
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
%>
</table>
<p align="center"
class="small">
※ 中国铁道出版社,
欢迎读者选购 ※
</p>
</body>
</html>
46
10.6 HTML套用文本文件范例
10.6.1 文本文件用于动态网页范例执行结果如下图所示。
47
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例通常在银行的大厅都会有一块存款利率公告表,
公告银行最新的存款利率。下面是某银行 1989年 11月
30 日的存款利率公告及静态的 HTML源代码,下图是公告界面。
48
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例其完整的程序代码 (rateaffi.htm)如下:
<HTML>
<HEAD>
<style type="text/css">
<!--
.topic { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,11pt; vertical-align,middle; line-height:16pt;}
.small { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,9pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3;font-style:normal;cursor:hand;text-decoration:normal}
a:visited {color:#0F56A3;font-style:normal;text-decoration:normal}
a:active {color:#0F56A3;font-style:normal;text-decoration:normal}
a:hover {color:#CC0000;font-style:bold;text-decoration:none}
-->
</style>
<TITLE>利率查询 </TITLE>
<META HTTP-EQUIV="Content-Type" CONTENT="text/html,charset="GB2312">
49
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
</HEAD>
<BODY bgcolor="#FFFFFF">
<center class=topic>
某某银行 XX币存款利率表
<hr width="270">
<table border="1" cellspacing="0" cellpadding="0"
bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF,bgcolor="#F2FDFD">
<tr>
<td colspan=4 align="center" class=topic bgcolor="#FFEFBF">
公告日期,89/11/30</td>
</tr>
<tr bgcolor="#FFEFBF" align="center" class=topic>
<td>科目名称 </td>
<td>期别 </td>
<td>活期利率 </td>
<td>定期利率 </td>
</tr>
50
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
<tr bgcolor="#eaeaf4" class=small>
<td align=left >活期存款 </td>
<td align=right>--</td>
<td align=right>1.7500%</td>
<td align=right>--</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >活期储蓄存款 </td>
<td align=right>--</td>
<td align=right>4.1000%</td>
<td align=right>--</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1个月 </td>
<td align=right>4.5000%</td>
<td align=right>4.4000%</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>3个月 </td>
<td align=right>4.7500%</td>
<td align=right>4.7000%</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>6个月 </td>
<td align=right>4.9000%</td>
<td align=right>4.9000%</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>9个月 </td>
<td align=right>5.0000%</td>
51
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rateaffi.htm (续 ),
<td align=right>5.0000%</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1年 </td>
<td align=right>5.1500%</td>
<td align=right>5.2000%</td>
</tr>
</table>
</center>
<center class=small>
<hr width="270">
※ 以上仅供参考,实际利率以交易当时利率为准 ※
</center>
<center class=small>※ 您若有任何问题,
请洽询本行各地分行 ※ </center>
<p align=center class=small>
<a href="http://www.hlfjob.com.cn">首页 </a> |
<a href="http://www.hlfjob.com.cn/
newbook01.htm">最新书讯 </a> |
<a href="http://www.hlfjob.com.cn/
cdmenu01.htm">教学光盘 </a> |
<a href="http://www.hlfjob.com.cn">
hlfjob人才求职网 </a> |
<a href="mailto:service@hlfjob
.com.cn">服务信箱 </a>
</p>
</BODY>
</HTML>
52
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例在本范例中,同样采用文本文件存放利率相关参数。但是文本文件采用固定字段格式,示范如何将
HTML与固定格式的文本文件合并输出。本范例的架构如下图所示。
从图的结构中,我们可以看出此范例需要三个文件,分别是
HTML模板文件、参数文件以及 ASP程序代码。
53
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
1,HTML模板文件以静态 HTML源代码为基础,将活期利率及定期利率的信息删除,改为模板变量,变量名称以不和其他 HTML源代码冲突为原则。
例如本例中的 #11#代表活期存款活期利率,#12#为活期存款定期利率,模板文件的 HTML源代码 (rate.dwt)如下:
<HTML>
<HEAD>
<style type="text/css">
<!--
.topic { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,11pt; vertical-align,middle; line-height:16pt;}
.small { font-family,"宋体 "; color,#000000; font-style,normal;
font-size,9pt; vertical-align,middle; line-height:16pt;}
a:link {color:#0F56A3;font-style:normal;cursor:hand;text-decoration:normal}
a:visited {color:#0F56A3;font-style:normal;text-decoration:normal}
a:active {color:#0F56A3;font-style:normal;text-decoration:normal}
a:hover {color:#CC0000;font-style:bold;text-decoration:none}
54
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
-->
</style>
<!-- TemplateBeginEditable name="doctitle" -->
<TITLE>利率查询 </TITLE>
<!-- TemplateEndEditable -->
<META HTTP-EQUIV="Content-Type" CONTENT="text/html,
charset="GB2312">
<!-- TemplateBeginEditable name="head" --><!-- TemplateEndEditable -->
</HEAD>
<BODY bgcolor="#FFFFFF">
<center class=topic>
某某银行 XX币存款利率表
<hr width="270">
<table border="1" cellspacing="0" cellpadding="0"
bordercolorlight="#CCCCCC" bordercolordark="#FFFFFF“
bgcolor="#F2FDFD">
<tr>
<td colspan=4 align="center" class=topic bgcolor="#FFEFBF">
公告日期,89/11/30</td>
55
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
</tr>
<tr bgcolor="#FFEFBF" align="center“
class=topic>
<td>科目名称 </td>
<td>期别 </td>
<td>活期利率 </td>
<td>定期利率 </td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >活期存款 </td>
<td align=right>--</td>
<td align=right>#11#</td>
<td align=right>#12#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >活期储蓄存款 </td>
<td align=right>--</td>
<td align=right>#21#</td>
<td align=right>#22#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1个月 </td>
<td align=right>#31#</td>
<td align=right>#32#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>3个月 </td>
<td align=right>#41#</td>
<td align=right>#42#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>6个月 </td>
<td align=right>#51#</td>
56
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
rate.dwt (续 ),
<td align=right>#52#</td>
</tr>
<tr bgcolor="#bdf3eb" class=small>
<td align=left >定期存款 </td>
<td align=right>9个月 </td>
<td align=right>#61#</td>
<td align=right>#62#</td>
</tr>
<tr bgcolor="#eaeaf4" class=small>
<td align=left >定期存款 </td>
<td align=right>1年 </td>
<td align=right>#71#</td>
<td align=right>#72#</td>
</tr>
</table>
</center>
<center class=small>
<hr width="270">
※ 以上仅供参考,实际利率以交易当时利率为准 ※
</center>
<center class=small>※ 您若有任何问题,
请洽询本行各地分行 ※ </center>
<p align=center class=small>
<a href="http://www.hlfjob.com.cn">首页 </a> |
<a href="http://www.hlfjob.com.cn/
newbook01.htm">最新书讯 </a> |
<a href="http://www.hlfjob.com.cn/
cdmenu01.htm">教学光盘 </a> |
<a href="http://www.hlfjob.com.cn">
hlfjob人才求职网 </a> |
<a href="mailto:service@hlfjob.com.cn">
服务信箱 </a>
</p>
</BODY>
</HTML>
57
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
2,参数文件为方便程序设计起见,参数文件的设计与模板文件必须互相搭配,因此我们在参数文件的每一组数据前安插一个变量 (与模板文件对应 ),如下图所示。
58
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码现在我们有了 HTML模板文件,也有利率的参数文件,接下来就必须编写 ASP程序进行套表的工作。预计程序设计流程如下:
( 1)加载模板文件 (rate.dwt)到变量 template
( 2)打开利率参数文件 rate.txt
( 3)读取一条数据
( 4)取得第一及第二个字段的变量名称和内容
( 5)取代模板文件的变量
( 6)跳至步骤 3,直到文件处理完毕
( 7)关闭文件
59
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 加载模板文件 (rate.dwt)至变量 template
在本例中,我们使用文件对象的 ReadAll方法加载模板文件至变量 template。加载的程序代码如下:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.dwt"))
template = fp.ReadAll ' 加载 HTML模板文件 rate.dwt
fp.close
Set fp = Nothing
Set fso = Nothing
60
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 打开利率参数文件 rate.txt
使用文件对象的 OpenTextFile方法打开参数文件。例如:
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.txt"))
● 读取一条数据在正确打开文件后,我们利用文件对象的 ReadLine方法,读取一条数据至变量 s。其程序代码如下:
s = fp.ReadLine
61
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 取得第一及第二个字段的变量名称和内容本参数文件为固定格式,因此我们使用 Mid 函数直接解析变量 s的内容至 fd1,fv1,fd2,fv2,其中 fd1代表第一个字段的变量名称 (Field 1),fv1则是字段的值 (Field Value 1),以此类推。解析的程序代码如下:
fd1 = Mid(s,1,4) '取得模板变量,例 #11#
fv1 = Mid(s,5,8) '取得模板变量的值,例 1.7500%
fd2 = Mid(s,14,4) '取得模板变量,例 #12#
fv2 = Mid(s,18,8) '取得模板变量的值,例 --
62
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 替代模板文件的变量在 ASP的字符串函数中,Replace函数具有替代字符串的能力,
因此我们将它用在本范例中,以更换模板文件中的活期利率及定期利率的值。当数据逐条被读入并被解析完毕,存入相对应的变量后,
就可以进行取代模板变量的操作。其用法如下:
template = Replace(template,fd1,fv1) ' 替换模板中的变量 #11#,..
template = Replace(template,fd2,fv2) ' 替换模板中的变量 #12#,.,
63
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 关闭文件当文件处理完毕,必须将文件关闭并将资源释放。其程序代码如下:
fp.close
Set fp = Nothing
Set fso = Nothing
● 执行结果当 ASP程序 (rate.asp)完成后,请将其与 rate.dwt 模板文件及
rate.txt参数文件置于同一目录下,然后执行 rate.asp。
64
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果完整的程序代码 rate.asp如下,
<%
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.dwt"))
template = fp.ReadAll ' 加载 HTML模板文件 rate.dwt
fp.close
Set fp = Nothing
Set fso = Nothing
Set fso = Server.CreateObject("Scripting.FileSystemObject")
Set fp = fso.OpenTextFile(Server.MapPath("rate.txt"))
Do While fp.AtEndOfStream <> True
s = fp.ReadLine
65
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果完整的程序代码 rate.asp(续 )如下,
fd1 = Mid(s,1,4) '取得模板变量,例 #11#
fv1 = Mid(s,5,8) '取得模板变量的值,例 1.7500%
fd2 = Mid(s,14,4) '取得模板变量,例 #12#
fv2 = Mid(s,18,8) '取得模板变量的值,例 --
template = Replace(template,fd1,fv1) ' 替换模板中的变量 #11#,..
template = Replace(template,fd2,fv2) ' 替换模板中的变量 #12#,..
Loop
Fp.close
Set fp = Nothing
Set fso = Nothing
Response.Write(template) ' 显示合并后的结果
%>
66
10.6 HTML套用文本文件范例
10.6.2 银行存款利率公告范例
3,ASP程序代码
● 执行结果执行结果如右图所示。
连续介绍两种文本文件套表的方法,不知道您喜欢哪一种。
第一种方法将 HTML与 ASP写在同一个文件中,在维护及管理上比较方便,第二种方法则是程序代码比较简洁,没有繁琐的
HTML和参数文件的牵绊。
67
第 10章 文本文件的访问看完文本文件的访问,相信以作者所举的范例来看,
应足以涵盖初学者及较高级的所有的运用,接下来就看读者您是否能举一反三。
看完本章您有什么感想呢? 或许您已经觉得 ASP真的很好,真的没有任何问题能够难倒它。
68
第 10章 文本文件的访问
习题
1,请利用记事本将邮政编码对照表建立文件 (格式如下 ),然后试着利用 ASP将此文本文件转入数据库。
100南海市和平区
101南海市
.
.
.
306海成县海边乡
2,请自行练习将 SQL Server的北风 (Northwind)数据库转成以逗号分隔的文本文件,文本文件名可由
HTML中设置。