新书推介:《语义网技术体系》
作者:瞿裕忠,胡伟,程龚
   XML论坛     W3CHINA.ORG讨论区     计算机科学论坛     SOAChina论坛     Blog     开放翻译计划     新浪微博  
 
  • 首页
  • 登录
  • 注册
  • 软件下载
  • 资料下载
  • 核心成员
  • 帮助
  •   Add to Google

    >> 本版讨论.NET,C#,ASP,VB技术
    [返回] 中文XML论坛 - 专业的XML技术讨论区计算机技术与应用『 Dot NET,C#,ASP,VB 』 → ASP编程入门进阶(连载)[转帖] 查看新帖用户列表

      发表一个新主题  发表一个新投票  回复主题  (订阅本版) 您是本帖的第 65767 个阅读者浏览上一篇主题  刷新本主题   树形显示贴子 浏览下一篇主题
     * 贴子主题: ASP编程入门进阶(连载)[转帖] 举报  打印  推荐  IE收藏夹 
       本主题类别:     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客11
    发贴心情 

    (十一):Chat聊天程序


    通常的聊天室所采用的程序,也就是Chat程序了,其基本结构原理是不会采用到数据库的。那究竟采用什么技术呢?我们知道ASP变量当中Session变量的作用是记录单个用户的信息,并且能跟踪用户的行为;Application对象的作用则起的全局变量,可以实现站点多个用户之间在页面中共享信息的。

    那可以想象,在针对当前聊天程序中,一个聊天成员即为一个Session变量,聊天成员之间的会话则当成Application变量进行共享显示,以使各成员都能看见。

    那下面就采用一很经典的实例程序,进行了解和分析。

    1,chat.asp


    <%If Request.ServerVariables("Request_Method")="GET" then%>
    <form method="post" action="chat.asp">
    <input type="text" name="nick" value="your nick name"><p>
    <input type="submit" value="come in"><p>
    <input type="hidden" name="log" size="20" value="1">
    </form>
    <%Response.End
    Else
    Response.clear
    dim talk
    If Request.Form("nick")<>"" then
    Session("nick")=Request.Form("nick")
    End if
    %>

    <form method="post" action="chat.asp" name=form1>
    <%=Session("nick")%>说话:
    <input type="text" name="talk" size="50"><br>
    <input type="submit" value="提交">
    <input type="reset" value="取消"></p>
    </form>
    <a href="chat.asp">离开</a><br>

    <%
    If Request.Form("log")<>1 then
    If trim(Request.Form("talk"))="" then
    talk=Session("nick")&"不说一句话就想来敷衍大家"
    Else
    talk=trim(Request.Form("talk"))
    End If
    Application.lock
    Application("show")="来自"&Request.ServerVariables("remote_addr")& "的" &Session("nick")&"在"&time& "的时候说:" &talk& "<br>" &Application("show")
    Application.UnLock
    Response.Write Application("show")
    End if
    %>
    <%End if%>


    简单解释:
    1,<%If Request.ServerVariables("Request_Method")="GET" then%>的作用就是判断当前页面接受的方式,如果为GET方式则会显示“要求输入昵称”的表单页。因为页面的默然接受方式为GET,当在URL地址栏直接敲入时,也就是没有任何信息的时候,就应该显示要求“输入昵称”。

    2,<input type="hidden" name="log" size="20" value="1">和下面的If Request.Form("log")<>1 then是有关联的:显然第一次输入昵称进入,同样将log隐藏域发送。但作为第一次的进入是无任何语句发言的,所以判断接受的log值不为1,亦即非首次登录(表示已经登录)时,执行内部相关聊天显示程序。

    3,trim(Request.Form("talk"))="",trim就是个函数了:删去字符串前,后的空格。初此,还有rtrim():去掉字符串后的空格;ltrim():去掉字符串前的空格。

    <script language=vbs>
    cnbruce=" This is a Test ! "
    alert("全部显示:"&cnbruce)
    alert("删除前面空格:"&ltrim(cnbruce))
    alert("删除后面空格:"&rtrim(cnbruce))
    alert("删除前后空格:"&trim(cnbruce))
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    4,
    Application.lock
    Application("show")="来自"&Request.ServerVariables("remote_addr")& "的" &Session("nick")&"在"&time& "的时候说:" &talk& "<br>" &Application("show")
    Application.UnLock


    提取精华得

    Application.lock
    Application("show")=talk& "<br>" &Application("show")
    Application.UnLock

    可以看到是Application变量的叠加功能,每次Application("show")的值都建立在原有Application变量值的基础之上,再附加上最新的聊天内容:talk变量的值。这样就保证所有用户都能看到的共享信息了。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:34:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客12
    发贴心情 
    (十二)缺

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:34:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客13
    发贴心情 
    (十三):Ad & Content Rotator


    ASP的强大不仅仅局限于接受和显示的交互,更多的是运用ActiveX 组件进行更强大的Web应用。

    那究竟ActiveX组件为何物?它又是如何运作的呢?其实ActiveX Server Components(ActiveX 服务器组件)是一个存在于 WEB 服务器上的文件,该文件包含执行某项或一组任务的代码,组件可以执行公用任务,这样就不必自己去创建执行这些任务的代码。很形象的一句话:运用组件直接采用别人经典的功能强大的程序。只不过这程序已被封装了的。

    那具体ActiveX组件是如何产生、如何得来的呢?一般由下面三个路径获得:
    1,安装完IIS服务器以后,自带的一些内置组件,如Database Access数据库连接组件。
    2,从第三方开发者处获得可选的组件,或者免费或者收费的,如一些上传组件(当然现在有无组件上传)。
    3,如果你是一位Web程序开发者,可以使用Visual Basic 、Java 、Visual C++ 、COBOL等程序设计语言来编写你所需要的ActiveX Server Component。这也就是所谓的ASP进行COM(Component Object Model)、COM+开发了。

    当然无论是第三方还是自行开发,在使用之前都必须要进行系统的注册。不过这些都是后话。我们现在需要的,是尽快先把ASP自带的一些组件搞懂吧。

    不过在使用内置组件之前,先用一个程序检测一下自己机器中的组件支持情况。
    引用一段网上流行的“阿江ASP探针”,将下列代码保存为asp文件进行调试查看。

    1,objcheck.asp

    <%Option Explicit %>
    <%
    Dim filename
    filename=Request.ServerVariables("SCRIPT_NAME")

    Dim ObjTotest(14,4)
    ObjTotest(0,0) = "MSWC.AdRotator"
    ObjTotest(0,1) = "广告轮显组件"
    ObjTotest(1,0) = "MSWC.ContentRotator"
    ObjTotest(1,1) = "内容轮显组件"
    ObjTotest(2,0) = "MSWC.BrowserType"
    ObjTotest(2,1) = "浏览器类型显示组件"
    ObjTotest(3,0) = "MSWC.NextLink"
    ObjTotest(4,0) = "MSWC.Tools"
    ObjTotest(5,0) = "MSWC.Status"
    ObjTotest(6,0) = "MSWC.Counters"
    ObjTotest(7,0) = "MSWC.IISLog"
    ObjTotest(8,0) = "MSWC.PermissionChecker"
    ObjTotest(9,0) = "Microsoft.XMLDom"
    ObjTotest(10,0) = "IISSample.ContentRotator"
    ObjTotest(11,0) = "IISSample.PageCounter"
    ObjTotest(12,0) = "Scripting.FileSystemObject"
    ObjTotest(13,0) = "adodb.connection"

    public IsObj,VerObj,TestObj

    dim i
    for i=0 to 13
    on error resume next
    IsObj=false
    VerObj=""
    TestObj=""
    set TestObj=server.CreateObject(ObjTotest(i,0))
    If IsObject(TestObj) then
    IsObj = True
    VerObj = TestObj.version
    if VerObj="" or isnull(VerObj) then VerObj=TestObj.about
    end if
    ObjTotest(i,2)=IsObj
    ObjTotest(i,3)=VerObj
    next

    sub ObjTest(strObj)
    on error resume next
    IsObj=false
    VerObj=""
    TestObj=""
    set TestObj=server.CreateObject (strObj)
    If IsObject(TestObj) then
    IsObj = True
    VerObj = TestObj.version
    if VerObj="" or isnull(VerObj) then VerObj=TestObj.about
    end if
    End sub
    %>
    <title>Object Check</title>
    <table border="1" cellpadding="0" cellspacing="0" style="border-collapse: collapse" bordercolor="#cccccc" width=80%>
    <tr align=center><td width=40%>组 件 名 称</td><td width=40%>相 关 信 息</td></tr>
    <%For i=0 to 13%>
    <tr>
    <td>&nbsp;<%=ObjTotest(i,0) & "&nbsp;<font color=#888888>" & ObjTotest(i,1)%></font></td>
    <td>&nbsp;
    <%
    If Not ObjTotest(i,2) Then
    Response.Write "<font color=red>不支持</font>"
    Else
    Response.Write "支持," & left(ObjTotest(i,3),22)
    End If%></td>
    </tr>
    <%next%>
    </table>

    <FORM action=<%=filename%> method=post>
    <input type=text name="classname" size=40>
    <INPUT type=submit value=" 确 定 ">
    </FORM>

    <%
    Dim strClass
    strClass = Trim(Request.Form("classname"))
    If strClass <> "" then
    Response.Write "<br>您指定的组件的检查结果:"
    Dim Verobj1
    ObjTest(strClass)
    If Not IsObj then
    Response.Write "<br><font color=red>很遗憾,该服务器不支持 " & strclass & " 组件!</font>"
    Else
    if VerObj="" or isnull(VerObj) then
    Verobj1="无法取得该组件版本"
    Else
    Verobj1="该组件版本是:" & VerObj
    End If
    Response.Write "<br><font class=fonts>恭喜!该服务器支持 " & strclass & " 组件。" & verobj1 & "</font>"
    End If
    End if
    %>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    如果你可以运行该ASP文件,也就是说你拥有IIS的WEB服务了。既然有IIS,不出意外,我们今天要学的组件AdRotator相信应该也是支持的。
    P.S.一般微软自带的大多是MSWC开头,我也一般戏称为Microsoft WC :)

    一、AdRotator组件
    该组件通常又称广告轮显组件,其功能相当于在网站上建立了一个,符合广告领域标准功能的广告系统。它具有:每次访问ASP页面时,在页面上显示不同的广告内容;跟踪特定广告显示次数的能力以及跟踪客户端在广告上单击次数的能力。

    AD Rotator 组件的工作原理是通过读取 AD Rotator 计划文件来完成的,该文件包括与要显示图象文件的地点有关的信息,以及每个图象的不同属性。下面就是一个标准的 AD Rotator 计划文件。

    1,类型为txt文本 ,命名为myadrot.txt


    redirect gourl.asp
    width 88
    height 31
    border 1
    *
    http://www.cnbruce.com/images/logo.gif
    http://www.cnbruce.com/
    CN-Bruce
    10

    http://www.it365cn.com/images/logo.gif
    http://www.it365cn.com
    It365cn
    10

    http://www.blueidea.com/images/logo.gif
    http://www.blueidea.com
    Blue!dea
    10

    代码的前四行包含了广告的全局设置:

    1,Redirect 指出广告将成为其热连接的URL。但其并非直接跳转的URL,它包含了两个参数的查询字符串:特定广告主页的URL和图象文件的URL。这些值从而可在gourl.asp文件中进行提取,并且与此同时gourl.asp还可以进行其他的处理工作,比如跟踪单击广告的次数、跳转到接受的的广告主页等。
    2,width、height、border不用说一看就知道是连接图片的宽、高以及边框线大小。

    “*”号表示了分隔符,以及“*”号下面的每四行为一个单位进行描述每个广告的细节。其中分别代表:

    1,每个广告的描述包含图象文件的URL
    2,广告对象的主页URL(如果广告客户没有主页,则该行为一个连字符“-”,指出该广告没有链接)
    3,图象的替代文字
    4,及指定该页与其他页交替显示频率的数值。

    该文件是用户自创建的文件。它通常用来解析由AdRotator对象发送的查询字符串的脚本,并将用户重定向到与用户所点击的广告所相关的URL。那具体怎么应用该定向文件呢?

    2、adrotator.asp
    该文件最主要的是连接myadrot.txt文件,并且执行myadrot.txt文件中的信息内容。很简单,两行代码。


    <%set myad=Server.CreateObject("MSWC.adrotator")%>
    <%=myad.getadvertisement("myadrot.txt")%>


    “<%set myad=Server.CreateObject("MSWC.adrotator")%>”学过Server对象,相信还记得该对象强大的一个方法,那就是CreateObject。他可用于创建已经注册到服务器上的ActiveX组件实例。那这就表示引用组件MSWC.adrotator了。

    “<%=myad.getadvertisement("myadrot.txt")%>”Ad Rotator组件支持的唯一方法也就是GetAdvertisement了,它只有一个参数:AdRotator计划文件的名称。注意指向文件的路径是当前虚拟目录的相对路径,物理路径是不允许的。也就是说当前的adrotator.asp和myadrot.txt是在同一目录下了。

    然后进行执行该ASP文件,多次刷新,会发现每次的广告确实是在轮显着的。这时再注意点击图片的超级连接地址。比如:

    gourl.asp?url=http://www.cnbruce.com/&image=http://www.cnbruce.com/images/logo.gif


    很明显我们还需要建立gourl.asp,并且将url参数的值进行提取,再接着跳转到该url地址上。

    3、gourl.asp
    该页主要功能:提取url参数值,跳转到广告主页。


    <%whaturl=request.querystring("url")%>
    <%response.redirect whaturl%>

    功能很简单就完成。当然,刚才也说了,这个页还可以做其它一些事件:跟踪客户端在广告上单击次数,比如将接受过来的相同的url地址进行记数的累加,就能显示出该网站广告的点击次数,然后和相应广告商拿取相应的费用什么的……呵呵,在早期都要求需要实际点击率的,现在好象不管,只要广告挂那儿就行-_-!

    不过,总的说来,这个组件的功能就是这样。你有多个广告商,并且是按比例单独显示,还需要计算实际点击率的时候,用Ad Rotator组件是最好不过。那也就是说视情况而定了。

    最后再说下,该组件的实现需要三个文件:重定向文件、引用文件、处理转向文件。

    二、Content Rotator组件

    正如Ad Rotator为一广告轮显,Content Rotator组件则为内容轮显。
    该组件就像一个简化了的Ad Rotator组件,所以其工作原理亦为:通过读取计划文件来完成的网页内容的显示。该计划文件也就是:内容调度文件(Content Schedule File)。

    1,类型为txt文本 ,命名为context.txt

    %% 3 //后面是注释
    <color=red>ASP编程入门进阶</color>

    %% 4 //下面显示表格
    <table><tr><td>www.cnbruce.com</td></tr></table>

    %% 5
    <A HREF="http://www.cnbruce.com">CN-Bruce</A>

    该文件的结构比Ad Rotator的调度文件简单,仅需提供要使用的各个文本字符串的列表,由前面加两个百分号(%%)的语句行说明。

    为了设置每个条目的比率(决定它出现在返回页面中的频率),在双百分号的后面添加了一个数字。如果其后跟双斜杠(//)就表示为添加的注释。

    接着就是通过ASP页面将这些信息按规定完整显示。

    2、showcontext.asp


    <%
    Set MyContent = Server.CreateObject("MSWC.ContentRotator")
    Content = MyContent.ChooseContent("context.txt")
    Response.Write Content
    %>


    "Set MyContent = Server.CreateObject("MSWC.ContentRotator")",先建立和Content Rotator组件的联系。

    "Content = MyContent.ChooseContent("context.txt")",表示采用Content Rotator组件的有个方法:ChooseContent,并且赋值给变量Content,到最后输出显示结果。

    3、showall.asp
    以上页面内容个显示是通过Content Rotator组件的ChooseContent方法实现的。此外,该组件还有一方法:GetAllContent。示例如下:

    <%
    Set MyContent = Server.CreateObject("MSWC.ContentRotator")
    Content = MyContent.GetAllContent("context.txt")
    Response.Write Content
    %>


    运行结果会发现context.txt所有内容被解释执行,并且分类之间会自动添加了<hr>水平线。

    当然这个方法可以用在随机图片之类的特效页面上。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:36:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客14
    发贴心情 
    (十四):Browser & Linking


    Browser Capabilities组件

    该组件最主要的作用是:提取识别客户端浏览器的版本信息。

    其原理是这样的:当客户端浏览器向服务器发送页面请求时,同时会自动发送一个User Agent HTTP标题,而该标题是一个声明浏览器及其版本的 ASCII 字符串。而Browser Capabilities组件就将User Agent映射到在文件Browscap.ini中所注明的浏览器 , 并通过BrowserType对象的属性来识别客户浏览器。

    若该对象在 browscap.ini 文件中找不到与该标题匹配的项,那么将使用默认的浏览器属性。若该对象既未找到匹配项且 browscap.ini 文件中也未指定默认的浏览器设置,则它将每个属性都设为字符串 "UNKNOWN"。

    在默认情况下,browscap.ini文件被存放在 WINDOWS\SYSTEM\INERSRV( 如果是95/98+PWS4) 或 NT\SYSTEM32\INERSRV( 如果是 NT) 目录中,你可以自己编辑这个文本文件,以添加自己的属性或者根据最新发布的浏览器版本的更新文件来修改该文件。

    可以得出结论,Browser Capabilities组件也就是提取某个文件中的内容,然后比较得出显示。具体该如何应用呢?

    1,btinfo.asp

    <%set bc=server.CreateObject("mswc.browsertype")%>
    浏览器名称是browser:<%=bc.browser%><br>
    浏览器版本是version:<%=bc.version%> <br>
    浏览器主版本是majorver:<%=bc.majorver%> <br>
    浏览器辅版本是minorver:<%=bc.minorver%> <br>
    浏览器的运行平台是platform:<%=bc.platform%> <br>

    很显然“<%set bc=server.CreateObject("mswc.browsertype")%> ”就是进行的浏览器组件的建立
    以下诸如“bc.browser”之类即为显示浏览器的具体某个特性了。

    2,btif.asp

    <%set bc=server.CreateObject("mswc.browsertype")%>
    <%if bc.frames=true then%>
    浏览器支持多窗口(frames)显示
    <%else%>
    浏览器不支持多窗口(frames)显示
    <%end if%>
    <br>
    <%if bc.backgroundsounds=true then%>
    浏览器可以播放背景音乐(backgroundsounds)
    <%else%>
    浏览器不能播放背景音乐(backgroundsounds)
    <%end if%>
    <br>
    <%if bc.tables=true then%>
    浏览器支持表格(tables)显示
    <%else%>
    浏览器不支持表格(tables)显示
    <%end if%>
    <br>
    <%if bc.beta=true then%>
    你的浏览器是一测试版(beta)
    <%else%>
    你的浏览器是一正式版
    <%end if%>
    <br>
    <%if bc.activexcotrols=true then %>
    浏览器支持active控制
    <%else%>
    浏览器不支持active控制
    <%end if%>
    <br>
    <%if bc.cookies=true then%>
    浏览器支持cookie功能
    <%else%>
    浏览器不支持cookie功能
    <%end if%>
    <br>
    <%if bc.vbscript=true then%>
    浏览器支持vbscript
    <%else%>
    浏览器不支持vbscript
    <%end if%>
    <br>
    <%if bc.jscript=true then%>
    浏览器支持jscript
    <%else%>
    浏览器不支持jscript
    <%end if%>

    该代码则是检测当前浏览器对各类网页技术的支持情况,那下面就可以根据某特定情况做相应变动

    3,fram.asp

    <%set bc=server.CreateObject("mswc.browsertype")
    if bc.frames then
    %>
    <frameset rows="*,*">
    <frame src="http://www.google.com">
    <frame src="http://www.baidu.com">
    </framest>
    <%else%>
    你的浏览器不支持框架
    <%end if%>

    很简单的意思:如果当前浏览器支持框架则进行frameset的显示,否则提示“你的浏览器不支持框架”

    当然,需要提醒你的:不要过分依赖该组件,因为其只是提取browscap.ini里的值,而该值随时可以被客户修改,或者记录过时,不能真实反映到浏览器的情况,慎用之。

    二、Content Linking组件

    曾经用DW做网页都有这样一个烦恼:新做了页面,其它所有相关的页都要重新再做一次超级链接。一次也就罢了,多了多了不禁觉得无用功做了不少。试想如果能有一个专门的文件来负责页面的连接那该多好。

    Content Linking 组件也就应运而生了。它非但可以使你在这些页面中建立一个目录表,而且还可以在它们中间建立动态连接,并自动生成和更新目录表及先前和后续的 Web 页的导航链接。

    使用该组件,首先需要编写一个目录文件,也就是网页网址的顺序列表文件,它是一个文本文件,可以自由命名。其次,编写一个ASP文件,根据目录文件提供的信息自动生成带超链的目录页。如果需要在每一页上假如“向前或向后翻页”的超链,就再编写一个能自动生成翻页超链的包含文件,可使用inc为扩展名,例如"Nlink.inc"。以后,在组内每一页中包含它。

    1,link.txt

    redirect.asp?url=http://www.cnbruce.com/ cnbruce.com
    redirect.asp?url=http://www.blueidea.com/ blueidea.com
    redirect.asp?url=http://www.it365cn.com/ it365cn.com

    该目录文件的网址就是连接网址,文本就是连接文本了,需要注意的是中间采用Tab键进行分隔。

    2,link.asp

    <%Set objNextLink = Server.CreateObject("MSWC.Nextlink")%>
    <%
    intCount = objNextLink.GetListCount("link.txt")
    For i = 1 To intCount
    %>
    <a href="<%=objNextLink.GetNthURL("link.txt", i) %>">
    <%=objNextLink.GetNthDescription("link.txt", i) %>
    </a>
    <br>
    <%Next%>

    “Set objNextLink = Server.CreateObject("MSWC.Nextlink")”建立Nextlink组件的连接
    “objNextLink.GetListCount("link.txt")”提取link.txt文件中的列表数目
    “objNextLink.GetNthURL("link.txt",i)”提取link.txt文件中第i行文本的连接网址
    “objNextLink.GetNthDescription("link.txt",i)”提取link.txt文件中第i行文本的连接文本

    3,redirect.asp
    也就是转向文件了。

    <%
    Response.Clear
    Response.Redirect Request.QueryString("url")
    %>

    呵呵,是不是觉得还没用到“上一页”、“下一页”的功能。再来~!

    4,link1.txt

    1.asp ASP编程入门进阶(一)
    2.asp ASP编程入门进阶(二)
    3.asp ASP编程入门进阶(三)
    4.asp ASP编程入门进阶(四)

    主要功能是设置文本和连接

    5,link1.inc

    <%Set Nextlink=Server.CreateObject("MSWC.NextLink")
    Response.write "当前文章索引号为" & NextLink.GetListIndex("link1.txt") & "<br>"
    Response.write "上一章的标题:" & NextLink.GetPreviousDescription("link1.txt") & "<br>"
    Response.write "下一章的标题:" & NextLink.GetNextDescription("link1.txt") & "<br>"
    count = NextLink.GetListCount("link1.txt")
    Response.write "<a href="""&NextLink.GetNthUrl("link1.txt",1)&"""&>"&"第一章"&"</a> "
    Response.write "<a href="""&NextLink.GetPreviousUrl("link1.txt")&"""&>"&"上一章"&"</a> "
    Response.write "<a href="""&NextLink.GetNextUrl("link1.txt")&"""&>"&"下一章"&"</a> "
    Response.write "<a href="""&NextLink.GetNthUrl ("link1.txt",count)&"""&>"&"最后一章"&"</a><br>"
    %>


    GetListCount(目标文件名) 显示组件中包含的连接的文件数目。
    GetListIndex(目标文件名) 显示当前页在这些连接文件中的前后位置索引值。
    GetNextDescription(目标文件名) 显示连接文件中下一个的描述。
    GetNextURL(目标文件名) 显示连接文件中的下一个文件的URL地址。
    GetNthDescription(目标文件名, N) 显示连接文件中第N个网页的描述。
    GetNthURL(目标文件名, N) 显示连接文件中第N个网页的文件URL地址。
    GetPreviousDescription(目标文件名) 显示连接文件中前一个文件的描述。
    GetPreviousURL(目标文件名) 显示连接文件中前一个文件的URL地址。


    6,1.asp,2.asp,3.asp,4.asp


    <!--#include file="link1.inc"--><br>
    以下是具体内容

    着就是一个很简单的分页程序了。当然接着的后面会有些更详细更复杂的分页,慢慢来吧,呵呵。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:37:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客15
    发贴心情 
    (十五):组件Counters


    该组件用于创建一个或多个计数器,这些计数器用于跟踪某一网页或某一网站访问次数的信息。你只能创建一个计数器组件,但该组件可以有多于一个的计数器。

    一旦创建了计数器,它将一直持续下去直到被删除为止。

    计数器不会在一个事件比如访问一页时自动增加。你必须使用Set和Increment方法人工的设置或增长计数器。

    计数器不受作用域限制。一旦创建了一个计数器,那么站点上的任何页都可以检索和控制它的值。

    一、Counters.Set & Counters.Get
    Counters.Set主要用来设置记数初始值,Counters.Get则是用来提取记数的值。

    1,counts_set.asp

    <%
    Set Counters=server.createobject("MSWC.Counters")
    Counters.Set "cnbruce",10
    Counters.set "it365cn",20
    Counters.set "blueidea",30
    %>
    共有<%= Counters.Get("cnbruce") %>次访问 cnbruce.com 网站 <br>
    共有<%= Counters.Get("it365cn") %>次访问 it365cn.com 网站 <br>
    共有<%= Counters.Get("blueidea") %>次访问 blueidea.com 网站 <br>

    用法很简单,首先“Counters=server.createobject("MSWC.Counters")”表示建立了一Counters组件的连接;Counters.Set "cnbruce",10表示记数了名为“cnbruce”的初始值10;Counters.Get("cnbruce")就表示提取名为“cnbruce”的记数值了。

    二、Counters.Increment
    该方法的功能是:记数每次加一。在上例中你刷新页面,记数是不会添加的,所以现在换用Increment方法。

    2,counts_inc.asp

    <%
    Set Counters=server.createobject("MSWC.Counters")
    %>
    共有<%= Counters.Increment("cnbruce") %>次访问 cnbruce.com 网站 <br>
    共有<%= Counters.Increment("it365cn") %>次访问 it365cn.com 网站 <br>
    共有<%= Counters.Increment("blueidea") %>次访问 blueidea.com 网站 <br>

    基本代码相似,主要就是Counters.Increment的功能累加1。

    根据累加可以做个简单的投票系统了。

    3,vote.asp

    <%
    set Counters=server.createobject("MSWC.Counters")
    vote = Request.QueryString("site")
    Counters.Increment(vote)
    %>
    Vote for your Favorite Site:
    <FORM NAME="Voting for Sites" METHOD="GET" ACTION="vote.asp">
    <input type="RADIO" NAME="site" VALUE="cnbruce">cnbruce
    <input type="RADIO" NAME="site" VALUE="it365cn">it365cn
    <input type="RADIO" NAME="site" VALUE="blueidea">blueidea
    <BR><INPUT TYPE="SUBMIT" VALUE="Submit Vote">
    </FORM>
    Current Vote Tally:<BR>
    Cnbruce: <% =Counters.Get("cnbruce") %><BR>
    It365cn: <% = Counters.Get("it365cn") %><BR>
    Blueidea: <% = Counters.Get("blueidea") %><BR>

    功能是选择某单选按钮后提交,其对应的记数值则Counters.Increment

    三、Counters.Remove
    该对象则是起的记数清空的作用了。

    4,remove.asp

    <%
    set Counters=server.createobject("MSWC.Counters")
    vote = Request.QueryString("site")
    clear = Request.QueryString("clear")
    Counters.Increment(vote)
    If Not clear="" Then
    Counters.Remove("cnbruce")
    Counters.Remove("it365cn")
    Counters.Remove("blueidea")
    End If
    %>
    Vote for your Favorite Site:
    <FORM NAME="Voting for Sites" METHOD="GET" ACTION="remove.asp">
    <input type="RADIO" NAME="site" VALUE="cnbruce">cnbruce
    <input type="RADIO" NAME="site" VALUE="it365cn">it356cn
    <input type="RADIO" NAME="site" VALUE="blueidea">blueidea
    <BR><INPUT TYPE="SUBMIT" VALUE="Submit Vote">
    </FORM>
    Current Vote Tally:<BR>
    Cnbruce: <% =Counters.Get("cnbruce") %><BR>
    It365cn: <% = Counters.Get("it365cn") %><BR>
    Blueidea: <% = Counters.Get("blueidea") %>
    <FORM NAME="Clear Counters" METHOD="GET" ACTION="remove.asp">
    <BR><INPUT TYPE="SUBMIT" VALUE="Clear the Counters" NAME="clear">
    </FORM>

    通过今天的接触可以总结出,一个简单的记数系统已经有两种方法:使用Application对象、使用Counters组件。但更多的还有采用FSO,或者是需要数据库的就是后话慢慢谈了。


    在我们使用ASP组件时候还要注意一些东西:

    当我们使用服务器组件创建对象时,一般有两种方法。比较常用的方法是用SERVER对象的CreateObject() 方法,象这样:
    SET NextLink = Server.CreateObject("MSWC.NextLink")

    这种方法很好用,但是还有一种方法更节省系统资源。因为当你用Server.CreateObject()方法创建对象时,对象立即被加载,同时系统为这个对象分配好内存和其它资源。

    第二种创建对象的方法是利用HTML的<OBJECT>标记,语法是这样的:
    <OBJECT Runat=Sever ID=NextLink ProgID="MSWC.NextLink" ></OBJECT>

    利用<OBJECT>标记创建对象时,你要创建的对象不被马上加载,而是等到这个对象的方法或属性第一次被引用时才加载。这样,我们就会节省一些资源。虽然不是很多,但是当你的系统每天要承受近百万次的点击时,这对节省服务器资源就很有帮助了。(Pine译注)

    如其所言:我们的Counters则可以放于global.asa中

    <OBJECT RUNAT=Server SCOPE=Application ID=Counter PROGID="MSWC.Counters"></OBJECT>

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:38:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客16
    发贴心情 
    (十六):FSO组件之驱动器操作


    FSO,正如UFO般令人激动、令人神往,当然更多的亦是让人欢喜让人忧。君不见某空间服务商广告:100MB空间只要60RMB/年,支持数据库,支持什么什么……一问不支持FSO,立马泄气。那FSO究竟是什么东西,它的力量又是如何巨大,其操作的原理又是怎的怎的呢?这次来个彻底的理解。

    首先,FSO是FileSystemObject的简称。当然也就是我们的俗称FSO组件了,该组件可以用来处理驱动器、文件夹以及文件。

    它可以检测并显示出系统驱动器的信息分配情况;还能够创建、改变、移动和删除文件夹,并能探测一些给定的文件夹是否存在,若存在,还能提取出该文件夹的信息,如名称、被创建或最后一次修改的日期,等等。FSO还使得对文件的处理变得很容易。

    一、fso.GetDrive

    正如其它组件的建立一样,FSO的引用也必须建立连接。


    Set fso=Server.CreateObject("Scripting.FileSystemObject")

    注意CreateObject的内部再也不是MSWC了,而是Scripting。
    那下面就可以通过fso来处理驱动器了。比如fso.GetDriveName提取驱动器名,fso.GetDrive同样提取标准驱动器名。比如:

    1,fso.asp


    <%Set fso=Server.CreateObject("Scripting.FileSystemObject")%>
    <%=fso.GetDriveName("d:")%><br>
    <%=fso.GetDrive("d:")%>

    你会发现GetDriveName("d:")就是“d:”,而GetDrive("d:")则为标准的“D:”,所以我们一般这样写fso.GetDrive(fso.GetDriveName(drvPath))来提取某个具体的驱动盘。

    二、drv.GetInfo
    上面已经把某个特定的驱动器提取了,那接着是不是提取该驱动盘的具体信息。

    2,drv.asp


    <%
    Set fso=Server.CreateObject("Scripting.FileSystemObject")
    Set drv=fso.GetDrive(fso.GetDriveName("d:"))
    %>
    该盘的空间大小:<%=drv.TotalSize%><br>
    该盘的剩余空间大小:<%=drv.FreeSpace%>

    以上只是提取的D盘驱动器的信息,来个通用的函数,继续分别测试自己的驱动吧。

    3,drvinfo.asp


    <%
    Function ShowDriveInfo(drvPath)
    Dim fso, drv, s
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set drv = fso.GetDrive(fso.GetDriveName(drvPath))
    s = "驱动盘" & drv & "的卷标是:"
    s = s & drv.VolumeName & "<br>"
    s = s & "总计空间:" & drv.TotalSize & "<br>"
    s = s & "剩余空间:" & drv.FreeSpace & "<br>"
    s = s & "文件类型:" & drv.DriveType & "<br>"
    s = s & "文件系统:" & drv.FileSystem
    Response.Write s
    End Function
    %>
    <%
    on error resume next
    whatpath=request.form("path")
    if whatpath<>"" then
    ShowDriveInfo(whatpath)
    end if%>
    <form action="drvinfo.asp" method="post">
    <input name="path">
    <input type="submit">
    </form>


    其中的drv.TotalSize和drv.FreeSpace返回的是字节数,我们可以用FormatNumber()函数处理下。比如FormatNumber(Drive.TotalSize/1024,0)得到一眼就知磁盘多少G的值。

    还有一个文件类型:drv.DriveType最多的时候是显示数值“2”,其实“2”就表示的“硬盘驱动器”,“1”表示“软盘驱动器”,“4”表示“光盘驱动器”……

    下面就用一个程序遍历显示自己机器上所有驱动器的信息

    4,showall.asp


    <%
    Function tran(Driver)
    Select Case Driver
    Case 0: tran="设备无法识别"
    Case 1: tran="软盘驱动器"
    Case 2: tran="硬盘驱动器"
    Case 3: tran="网络硬盘驱动器"
    Case 4: tran="光盘驱动器"
    Case 5: tran="RAM虚拟磁盘"
    End Select
    End Function
    set fso=Server.CreateObject("Scripting.FileSystemObject")
    %>

    <table border=1 width="100%">
    <tr>
    <td>盘符</td>
    <td>类型</td>
    <td>卷标</td>
    <td>总计大小</td>
    <td>可用空间</td>
    <td>文件系统</td>
    <td>序列号</td>
    <td>是否可用</td>
    <td>路径</td>
    </tr>
    <%
    on error resume next
    For each drv in fso.Drives
    Response.Write "<tr>"
    Response.Write "<td>" & drv.DriveLetter & "</td>"
    Response.write "<td>" & tran(drv.DriveType) & "</td>"
    Response.write "<td>" & drv.VolumeName & "</td>"
    Response.write "<td>" & FormatNumber(drv.TotalSize / 1024, 0)& "</td>"
    Response.write "<td>" & FormatNumber(drv.Availablespace / 1024, 0) & "</td>"
    Response.write "<td>" & drv.FileSystem & "</td>"
    Response.write "<td>" & drv.SerialNumber & "</td>"
    Response.write "<td>" & drv.IsReady & "</td>"
    Response.write "<td>" & drv.Path & "</td>"
    Response.Write "</tr>"
    Next
    set fs=nothing
    %>
    </table>

    http://www.cnbruce.com/code/showall.asp

    恩,是不是很神气?那你可以对自己的机器调试,然后上传到自己的空间去调试,你会发现服务商会你进行了些设置:)
    当然更神的还在后面面,比如对文件夹,对文件的操作(包括添加、修改和删除)。ps:你对驱动器是不能轻易添加删除的:)

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:38:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客17
    发贴心情 
    (十七):FSO组件之文件夹操作


    操作完驱动器,接着就是来操作文件夹了。其中包括:提取文件夹信息、创建文件夹、删除文件夹、复制文件夹、移动文件夹等。下面就具体来看。

    一、fso.GetFolder
    一看就明白,是提取文件夹了。那具体是提取哪个文件夹呢?后面肯定要跟一个文件夹的路径。提取出来了再来显示该文件夹相关信息呢?是不是有要具体提取下去。所以,看程序:
    1,getfldr.asp


    <%
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set fldr = fso.GetFolder("c:\Program Files")
    Response.Write "父文件夹名字是:" & fldr & "<br>"

    If fldr.IsRootFolder = True Then
    Response.Write "该文件夹是一根文件夹" & "<br>"
    Else
    Response.Write "该文件夹不是根文件夹" & "<br>"
    End If

    Response.Write "驱动器名字是:" & fldr.Drive & "<br>"
    %>

    首先建立FSO组件的连接是必不可少的啦,然后Set fldr = fso.GetFolder("c:\Program Files")设定fldr对象被赋值,以作下面程序的引用。

    fldr.IsRootFolder即为判断该文件夹是否为一根文件夹,值为布尔值(true or false);fldr.Drive则显示该文件夹所在的驱动器号了。

    二、fso.CreateFolder
    下面比较让人激动的是通过ASP建立文件夹了,你可以在你的权力范围内任意位置建立任意文件夹。
    2,creatfldr.asp


    <%
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder ("c:\cnbruce")
    Response.Write "文件夹名为" & fso.GetBaseName("c:\cnbruce")
    %>

    执行程序,应该发现C盘多出了cnbruce文件夹,fso.GetBaseName则是提取文件夹名。

    三、fso.DeleteFolder
    通过ASP可以建立了文件夹,则同样可以删除文件夹。

    3,delfldr.asp


    <%
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFolder("c:\cnbruce")
    Response.Write "文件夹已删除"
    %>


    发现刚建立的cnbruce文件夹确实已被删除。

    注意,有时需要删除文件夹,而该文件夹不存在时,会出现程序逻辑性错误。则应先判断文件夹的状态。

    <%
    dir=server.mappath("cnbruce")
    Set fso = CreateObject("Scripting.FileSystemObject")
    if (fso.FolderExists(dir)) then
    fso.DeleteFolder(dir)
    response.write("cnbruce文件夹已经删除")
    else
    fso.CreateFolder(dir)
    response.write("cnbruce文件夹已经建立")
    end if
    %>


    那下面就采用一个通用程序来灵活应变下。

    4,mainflr.asp


    <%
    Sub CreateAFolder(file)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder(file)
    response.write "已经建立了"&file
    End Sub

    Sub DeleteAFolder(file)
    Dim fso
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.DeleteFolder(file)
    response.write "已经删除了"&file
    End Sub
    %>
    <%
    subname=request.form("submit")
    create=request.form("create")
    del=request.form("del")
    if subname<>"" then
    if create<>"" then
    call CreateAFolder(""&create&"")
    end if
    if del<>"" then
    call DeleteAFolder(""&del&"")
    end if
    end if
    %>
    <form action="mainflr.asp" method="post">
    <input name="create">
    <input type="submit" value="建立" name="submit">
    </form>
    <hr>
    <form action="mainflr.asp" method="post">
    <input name="del">
    <input type="submit" value="删除" name="submit">
    </form>

    需要注意的是:删除并不会提示“确认要放入回收站”这项。这点你需要谨慎处理,特别是对你的系统文件夹。

    四、fso.MoveFolder
    主要作用是进行文件夹的移动,相当于剪切粘贴动作。

    5,movefldr.asp


    <%
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CreateFolder ("c:\cnbruce")
    fso.MoveFolder "c:\cnbruce", "C:\Program Files\"
    %>
    <a href="C:\Program Files\">查看cnbruce文件夹有没有移动过来</a>


    格式:fso.MoveFolder "被移动的文件夹","移动到的文件夹"

    本程序先是在C盘下建立了cnbruce文件夹,然后将其移动到C:\Program Files\文件夹下面。

    不过同样需要注意的是你的系统文件夹不能乱移动。

    五、fso.CopyFolder
    主要作用:将文件夹从某位置复制到另一位置。
    6,copyfldr.asp


    <%
    Set fso = CreateObject("Scripting.FileSystemObject")
    fso.CopyFolder "c:\Program Files\cnbruce", "c:\"
    %>
    <a href="C:\">查看cnbruce文件夹有没有复制过来</a>

    该程序是建立在上一movefldr.asp的执行结果基础之上来完成复制到C盘根目录下的。(话比较长-_-!)

    当然,其拷贝也是将该文件夹包括里面所以子文件夹和文件统统拷贝。

    到最后再试着将c:\Program Files\cnbruce和c:\cnbruce两个文件夹进行删除掉吧。

    不过,继续提醒你:不要写错了,比如写成c:\Program Files,那你就惨了:这叫玩命,学ASP玩出心跳出来了。

    对文件夹的操作差不多了,是不是感到用处比较大?有训言:好东西是把双刃剑。正义和邪恶就只一线间,注意正规合理利用该组件。不过还有你放心的是,现在网站空间服务商对这权力已经限定得死死的了,你再怎么闹翻也不会冒泡的:)

    然后接下来就是更微妙的:FSO对文件的操作。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:39:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客18
    发贴心情 
    (十八):FSO组件之文件操作(上)


    FSO中除了可以对驱动器、文件夹的操作以外,功能最强大的就是对文件的操作了。它可以用来记数、内容管理、搜索还可生成动态HTML页面等等。

    一、fso.OpenTextFile
    无需多说,fso.OpenTextFile就是打开某个文件了,一般情况之下是打开的txt文本文件。所以首先我们先建立一个txt文件,然后通过FSO来读取其中的内容。

    1,info.txt

    name:cnbruce
    sex:male

    建立了该文件,下面再做个ASP页面,当然最好两个文件是在同一目录下。

    2,opentxt.asp


    <%
    whichfile=server.mappath("info.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.OpenTextFile(whichfile,1)
    rline = txt.ReadLine
    rline = rline & "<br>" & txt.ReadLine
    Response.Write rline
    txt.Close
    %>


    需要注意:无论是通过FSO打开驱动器、打开文件夹、打开文件,以及以后要接触到的打开数据库,都只能是打开绝对物理路径地址。但一般情况是上传到空间服务商那,不能很直接地了解到自己文件的所在位置,所以强烈推荐使用server.mappath方法:平台移植性强,适用性强。

    CreateObject("Scripting.FileSystemObject")建立了FSO组件的连接,fso.OpenTextFile(whichfile,1)打开了info.txt该文件。参数“1”表示“ForReading:以只读方式打开文件。不能写这个文件。”,其他还有参数“2”表示“ForWriting:以写方式打开文件”,参数“8”表示“ForAppending:打开文件并从文件末尾开始写”。

    打开了该文件,接下来是不是要显示文件中的内容?那就通过txt.ReadLine方法读取文本中的一整行,如果需要继续读取下一行,则继续使用txt.ReadLine方法。当然初此还有其它的读取方法,比如txt.Read(7)读取指定数量的字符,txt.ReadAll返回文本中的全部内容。

    二、fso.CreateTextFile
    如fso.CreateFolder建立文件夹般,fso.CreateTextFile则是建立文件了。

    3,creattxt.asp


    <%
    whichfile=server.mappath("info.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set MyFile = fso.CreateTextFile(whichfile,True)
    MyFile.WriteLine("My Name Is CN-Bruce")
    MyFile.WriteLine("My Sex Is Male")
    MyFile.Close
    %>
    <a href="opentxt.asp">查看内容</a>


    本次建立的文件是上一info.txt文件,fso.CreateTextFile(whichfile,True)其中的参数true即表示能覆盖已有文件。建立后需要向里面添加数据就采用“MyFile.WriteLine”了。

    那现在就可以建立一个简单的文本记数器了,还记得以前的记数?:1,通过application、session、global.asa进行记数;2,通过Counter组件进行记数。但两者都有通病,就是不能保存,如果服务器重新启动后,是不是所有记数全部清空了呢:)那现在就可以使用文本来记录数据了,即使重启,下次提取的也还是该文件。

    试验:文本计数器

    首先建立一记数的文本文件counter.txt,设定初始值为“1”

    4,counter.txt

    1


    接着是记数的ASP文件,功能是显示文本的记数,本做加1的记数,然后还要将新的记数写入文本文件。

    5,txtcount.asp


    <%
    whichfile=server.mappath("counter.txt")
    '打开文件并将其值读取,最后关闭连接释放资源
    set fso=createobject("Scripting.FileSystemObject")
    set openfile=fso.opentextfile(whichfile,1)
    visitors=openfile.readline
    openfile.close
    '页面显示记数内容并做加1运算
    response.write "您是本页的第"&visitors&"位访客"
    visitors=visitors+1
    '将新的数值添加写入到文本,最后关闭所有连接释放资源
    set creatfile=fso.createtextfile(whichfile)
    creatfile.writeLine(visitors)
    creatfile.close
    set fso=nothing
    %>


    那根据这个可以继续地扩展内容:比如让记数用数字图片显示。当然前提就是你需要0-9的10张记数图片,并将此图片放于img文件夹中。
    下为一增强的txtcount.asp内容代码


    <%
    whichfile=server.mappath("counter.txt")

    set fso=createobject("Scripting.FileSystemObject")
    set openfile=fso.opentextfile(whichfile,1)
    visitors=openfile.readline
    openfile.close
    CountLen=len(visitors)
    response.write "您是本页的第"

    for i=1 to 6-countLen '表示最大值999999
    response.write "<img src=img/0.gif></img>"
    next
    for i=1 to countlen
    response.write "<img src=img/" & mid(visitors,i,1) & ".gif></img>"
    next
    response.write "位访客"

    visitors=visitors+1
    set creatfile=fso.createtextfile(whichfile)
    creatfile.writeLine(visitors)
    creatfile.close
    set fso=nothing
    %>


    本程序中采用的是mid函数,该函数的作用是返回某字符串中从第几位字符开始的几个字符。格式即为:Mid(string,start,length)
    <script language=vbs>
    cn_string= "cnbruce love cnrose"
    cn_start = 9
    cn_length = 4
    alert (mid(cn_string,cn_start,cn_length))
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:40:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客19
    发贴心情 
    (十八):FSO组件之文件操作(中)


    学会了FSO提取文件值,也学会了将信息输入到文件中,那下面就再来应用应用下。

    不知道你有没有这样的习惯:看到一个文件,不自觉的右键选择用记事本打开。呵呵,几乎没有哪个文件是不可以的。所以现在,可以默认所有文件都是文本,只是后缀名不同而已;那么也就是说,现在可以提取任一文件的内容信息。OK,就来想象一下:

    1,提取一个文件的路径(采用file按钮进行查找定位)
    2,将该路径文件打开,并读取所有行
    3,显示读取的信息

    一、viewcode.asp


    <%
    Function ShowCode(filename)
    Set fso = Server.CreateObject("Scripting.FileSystemObject")
    Set cnrs = fso.OpenTextFile(filename, 1)
    While Not cnrs.AtEndOfStream
    rsline = cnrs.ReadLine
    rsline = server.HTMLEncode(rsline)
    Response.Write(rsline & "<br>")
    Wend
    end Function
    %>

    <form action="viewcode.asp" method="post">
    输入文件名<input type="file" name="filename">
    <input type="submit" value="查看源程序">
    </form>

    <%
    file=request.form("filename")
    response.write (file & "源程序如下<hr>")
    If trim(file)<> "" then
    Call ShowCode(file)
    End If
    %>

    以上程序调试时,可以选择html,asp页面,也可以打开任一应用程序等。

    定义的ShowCode函数,主要作用是打开、读取并显示文件中所有信息内容。注意添加了server.HTMLEncode(rsline),针对含有标准HTML代码的文件。

    显示文件中所有行即用一条件循环进行遍历显示了。
    While Not cnrs.AtEndOfStream
    ...
    Wend

    接着,下面的这个例题具体就涉及open方法的问题了,还记得?正常情况之下打开文件是采用fso.OpenTextFile("c:\testfile.txt",1),参数1的作用是:以只读模式打开文件。不能对此文件进行写操作。如果现在已经存在一文件,需要进行追加写入,则该怎么办呢?简单,参数为8即可。

    PS:这里还有一种读取的方法。

    <%
    whichfile=server.mappath("test.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set txt = fso.OpenTextFile(whichfile,1)
    rline = txt.ReadAll
    rline=replace(Server.HtmlEncode(rline),Chr(13),"<br>")
    Response.Write rline
    txt.Close
    %>


    这有什么用呢?呵呵,亚玛逊的网络故事接龙就是如此:能接龙就需要首先要显示原有故事,然后自己添加故事写入文件。这其中的写入文件最讲究的就是追加写入了。所以下面就可以实现。

    二、story.asp

    <%
    If not request.Form("NextLine")="" then
    Set fso=Server.CreateObject("Scripting.FileSystemobject")
    textfile1=Server.MapPath("story.txt")
    set cnrs=fso.OpenTextFile(textfile1,8)
    cnrs.WriteLine(Request.Form("NextLine"))
    cnrs.Close
    end if
    %>
    故事如下:
    <%
    Set fso=Server.CreateObject("Scripting.FileSystemObject")
    textfile1=Server.MapPath("story.txt")
    set cnrs=fso.OpenTextFile(textfile1,1)
    while not cnrs.AtEndOfStream
    Response.Write "&nbsp;" & cnrs.ReadLine
    wend
    cnrs.close
    %>
    <hr>
    <form method="post" action="story.asp">
    请输入这个故事的新行:<input name="NextLine" type="text" size="70">
    <input type="submit" value="提交">
    </form>


    整个就是一很简单的读取信息和加入信息的混合利用,相信有了前面的基础看懂应该不成问题。当然还缺少个story.txt文件,里面写好故事开头就可以了。

    调试地址:
    http://www.cnbruce.com/code/story.asp

    再下面,继续来,该侧重点主要就是练习一些函数的使用技巧了。

    1,instr函数:返回某字符串在另一字符串中第一次出现的位置。
    比如现在查找字母“A”在字符串“A110B121C119D1861”中第一次出现的位置,则可以
    <script language=vbs>
    my_string = "A110B121C119D1861"
    a_num = instr(my_string,"A")
    alert(a_num)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    同样字母“B”的位置也就能确定。现在就来最关键的:提前字母“A”和“B”中间的值“110”。
    还记得mid函数吗?mid函数的主要作用是:从字符串中返回指定数目的字符。
    比如现在的“110”则应该是从字符串的第2位取得3个单位的值。
    <script language=vbs>
    my_string = "A110B121C119D1861"
    a_value = mid(my_string,2,3)
    alert(a_value)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    但设想一下:如果不是“110”,而是“1100”,那是不是要提取4位……这样就显出程序的不够完美。
    所以继续思考:所提取的值,永远是在字母“A”后面的,且值也永远是在字母“A”和“B”之间的,那么只要分别提取出“A”、“B”的位置,则中间数值的起始位应是字母“A”位+1,中间数值的长度应是字母“B”位-字母“A”位-1
    那么现在就可以让程序完美起来:

    <script language=vbs>
    my_string = "A110B121C119D1861"
    a_num = instr(my_string,"A")
    b_num = instr(my_string,"B")
    a_value = mid(my_string,a_num+1,b_num-a_num-1)
    alert(a_value)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    OK,那么现在你也就完全可以把字母“B”、“C”、“D”后面的值一一提取了。
    当然需要注意的就是“D”后面有几位怎么取呢?采用字符串总长度-字母D所在位置数就可以了。

    <script language=vbs>
    my_string = "A110B121C119D1861"
    a_num = instr(my_string,"A")
    b_num = instr(my_string,"B")
    c_num = instr(my_string,"C")
    d_num = instr(my_string,"D")
    total_num = len(my_string)
    a_value = mid(my_string,a_num+1,b_num-a_num-1)
    b_value = mid(my_string,b_num+1,c_num-b_num-1)
    c_value = mid(my_string,c_num+1,d_num-c_num-1)
    d_value = mid(my_string,d_num+1,total_num-d_num)
    alert(a_value)
    alert(b_value)
    alert(c_value)
    alert(d_value)
    </script>
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    用到现在,你也许确实学到了不少,但也许会提出疑问:这个放在FSO文件操作里有什么作用呢?
    那下面才是我们的正题:用FSO进行简单的文本投票。

    投票页面首要的就是显示各类项目的投票数,并相应赋于某个变量。然后判断本次投票的选相,相对应地将投票数值加1,完毕后再将所有值继续写入文本。

    1,一个HTML表单页website.html
    以做投票点击的平台。
    <form action="result.asp" method="post">
    <input type="radio" name="website" value="A" checked> cnbruce.com<br>
    <input type="radio" name="website" value="B"> blueidea.com<br>
    <input type="radio" name="website" value="C"> it365cn.com<br>
    <input type="radio" name="website" value="D"> 5d.cn<br>
    <input type="submit">
    <input type="reset">
    [Ctrl+A 全部选择 提示:你可先修改部分代码,再按运行]

    2,接受表单页值的result.asp


    <%
    whichfile=server.mappath("site.txt")
    set fso=createobject("Scripting.FileSystemObject")
    set thisfile=fso.opentextfile(whichfile)
    my_string=thisfile.readline

    a_num = instr(my_string,"A")
    b_num = instr(my_string,"B")
    c_num = instr(my_string,"C")
    d_num = instr(my_string,"D")
    total_num = len(my_string)

    a_value = mid(my_string,a_num+1,b_num-a_num-1)
    b_value = mid(my_string,b_num+1,c_num-b_num-1)
    c_value = mid(my_string,c_num+1,d_num-c_num-1)
    d_value = mid(my_string,d_num+1,total_num-d_num)

    select case request.form("website")
    case "A": a_value=a_value+1
    case "B": b_value=b_value+1
    case "C": c_value=c_value+1
    case "D": d_value=d_value+1
    end select

    mynew_string="A" & cstr(a_value) & "B" & cstr(b_value) & "C" & cstr(c_value) & "D" & cstr(d_value)
    set newfile=fso.createtextfile(whichfile)
    newfile.writeLine(mynew_string)
    newfile.close
    set fso=nothing
    %>
    当前投票:<br>
    cnbruce.com:<%=a_value%><br>
    blueidea.com:<%=b_value%><br>
    it356cn.com:<%=c_value%><br>
    5d.cn:<%=d_value%><br>
    <a href="website.html">返回继续</a>


    有了上面函数的基础,看这个应该不是很难的

    3,最后不要忘了的记数文件site.txt

    格式:A1B1C1D1

    调试地址:
    http://www.cnbruce.com/code/website.html

    OK,三个文件就可以胜任一个很简单的投票系统了,如果要加强,需要细化的则结合以前的知识吧,比如投过一次后设置session或者cookies,当再次投票时候判断如果session或者cookies存在则不允许,也就是简单的投票防作假手段了……当然更多的还是要自己去想去实践了。

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:41:00
     
     Qr 帅哥哟,离线,有人找我吗?
      
      
      威望:9
      等级:博士二年级(版主)
      文章:4392
      积分:29981
      门派:XML.ORG.CN
      注册:2004/5/15

    姓名:(无权查看)
    城市:(无权查看)
    院校:(无权查看)
    给Qr发送一个短消息 把Qr加入好友 查看Qr的个人资料 搜索Qr在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Qr的主页 引用回复这个贴子 回复这个贴子 查看Qr的博客20
    发贴心情 
    (十八):FSO组件之文件操作(下)

    一,fso.GetFile
    提取文件相应的 File 对象

    1,getfile.asp


    <%
    whichfile=Server.MapPath("cnbruce.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile(whichfile,true)
    f1.Write ("This is a test.My Name is cnbruce.")
    f1.Close
    Set f2 = fso.GetFile(whichfile)

    s = "文件名称:" & f2.name & "<br>"
    s = s & "文件短路径名:" & f2.shortPath & "<br>"
    s = s & "文件物理地址:" & f2.Path & "<br>"
    s = s & "文件属性:" & f2.Attributes & "<br>"
    s = s & "文件大小: " & f2.size & "<br>"
    s = s & "文件类型: " & f2.type & "<br>"
    s = s & "文件创建时间: " & f2.DateCreated & "<br>"
    s = s & "最近访问时间: " & f2.DateLastAccessed & "<br>"
    s = s & "最近修改时间: " & f2.DateLastModified
    response.write(s)
    %>


    其效果正如右键某文件,看到的具体属性信息。
    其中Attributes返回的数值“32”表示:(Archive)上次备份后已更改的文件。可读写。

    其它值附录如下:


    Normal 0 普通文件。 没有设置任何属性。
    ReadOnly 1 只读文件。 可读写。
    Hidden 2 隐藏文件。 可读写。
    System 4 系统文件。 可读写。
    Directory 16 文件夹或目录。 只读。
    Archive 32 上次备份后已更改的文件。 可读写。
    Alias 1024 链接或快捷方式。 只读。
    Compressed 2048 压缩文件。 只读。


    二,file.move
    作用将指定的文件或文件夹从某位置移动到另一位置。其实该方法仍然属于fso.GetFile后的一个应用。

    2,movefile.asp


    <%
    whichfile=Server.MapPath("cnbruce.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile(whichfile,true)
    f1.Write ("This is a test.My Name is cnbruce.")
    f1.Close
    Set f2 = fso.GetFile(whichfile)
    f2.Move "C:\"
    %>
    <a href="C:\">查看下有没有</a>


    简单的剪切粘贴的功能实现。

    三,File.Copy
    同样属于fso.GetFile后的一个应用。就只是单纯地拷贝文件到某位置。

    3,copyfile.asp


    <%
    whichfile=Server.MapPath("cnbruce.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile(whichfile,true)
    f1.Write ("This is a test.My Name is cnbruce.")
    f1.Close
    Set f2 = fso.GetFile(whichfile)
    f2.Copy "D:\"
    %>
    <a href="D:\">查看下有没有</a>


    和本ASP页面同在目录下的cnbruce.txt文件依然存在。

    四,file.Delete
    很显然,就是直接删除文件了。

    4,delfile.asp


    <%
    whichfile=Server.MapPath("cnbruce.txt")
    Set fso = CreateObject("Scripting.FileSystemObject")
    Set f1 = fso.CreateTextFile(whichfile,true)
    f1.Write ("This is a test.My Name is cnbruce.")
    f1.Close
    Set f2 = fso.GetFile(whichfile)
    f2.move "d:\"
    Set f3 = fso.GetFile("d:\cnbruce.txt")
    f3.delete
    %>
    <a href="d:\">查看下是没有该文件的</a>

    ----------------------------------------------
    没人帮忙,那就靠自己,自己才是最好的老师!本人拒绝回答通过站内短消息提出的问题!

    blog:http://Qr.blogger.org.cn

    点击查看用户来源及管理<br>发贴IP:*.*.*.* 2005/1/14 13:42:00
     
     GoogleAdSense
      
      
      等级:大一新生
      文章:1
      积分:50
      门派:无门无派
      院校:未填写
      注册:2007-01-01
    给Google AdSense发送一个短消息 把Google AdSense加入好友 查看Google AdSense的个人资料 搜索Google AdSense在『 Dot NET,C#,ASP,VB 』的所有贴子 访问Google AdSense的主页 引用回复这个贴子 回复这个贴子 查看Google AdSense的博客广告
    2024/4/30 23:17:30

    本主题贴数30,分页: [1] [2] [3]

    管理选项修改tag | 锁定 | 解锁 | 提升 | 删除 | 移动 | 固顶 | 总固顶 | 奖励 | 惩罚 | 发布公告
    W3C Contributing Supporter! W 3 C h i n a ( since 2003 ) 旗 下 站 点
    苏ICP备05006046号《全国人大常委会关于维护互联网安全的决定》《计算机信息网络国际联网安全保护管理办法》
    421.875ms