数据采集系统 数据采集系统 数据采集系统的定义 HYPERLINK "http://www.weeqoo.com/zhuanti/shujucaijixitong/" \l "TOP#TOP" \o "回到顶部" 数据采集系统是指传感器和其他待测设备等模拟和数字被测单元中自动采集信息的过程,或者是批量采集网页,论坛的内容,直接保存到数据库或发不到网络的一种信息化工具. 数据采集系统分类 数据采集系统一般分为设备类和网络类两种. 数据采集系统(设备) 是指从传感器和其它待测设备等模拟和数字被测单元中自动采集信息的过程.数据采集系统是结合基于计算机的测量软硬件产品来实现灵活的、用户自定义的测量系统.比如条码机、扫描仪等都是数据采集工具(系统). 数据采集系统(网络) 用来批量采集网页,论坛等的内容,直接保存到数据库或发布到网络的一种信息化工具.可以根据用户设定的规则自动采集原网页,获取格式网页中需要的内容,也可以对数据进行处理.比如乐思(Knowlesys)数据采集系统等. 数据采集的原理介绍 在计算机广泛应用的今天,数据采集的重要性是十分显着的.它是计算机与外部物理世界连接的桥梁.各种类型信号采集的难易程度差别很大.实际采集时,噪声也可能带来一些麻烦.数据采集时,有一些基本原理要注意,还有更多的实际的问题要解决. 采样频率、抗混叠滤波器和样本数 假设现在对一个模拟信号 x(t) 每隔Δt时间采样一次.时间间隔Δt被称为采样间隔或者采样周期.它的倒数 1/Δt被称为采样频率,单位是采样数 / 每秒. t=0, Δt,2 Δt,3 Δt …… 等等,x(t) 的数值就被称为采样值.所有 x(0),xΔt),x(2Δt) 都是采样值.下图显示了一个模拟信号和它采样后的采样值.样间隔是Δt,注意,采样点在时域上是分散的. 模拟信号和采样显示 如果对信号x(t)采集 N 个采样点,那么x(t)就可以用下面这个数列表示: 模拟信号和采样显示 这个数列被称为信号x(t)的数字化显示或者采样显示.注意这个数列中仅仅用下标变量编制索引,而不含有任何关于采样率(或Δt)的信息.所以如果只知道该信号的采样值,并不能知道它的采样率,缺少了时间尺度,也不可能知道信号x(t)的频率. 根据采样定理,最低采样频率必须是信号频率的两倍.反过来说,如果给定了采样频率,那么能够正确显示信号而不发生畸变的最大频率叫做恩奎斯特频率,它是采样频率的一半.如果信号中包含频率高于奈奎斯特频率的成分,信号将在直流和恩奎斯特频率之间畸变.图2显示了一个信号分别用合适的采样率和过低的采样率进行采样的结果. 采样率过低的结果是还原的信号的频率看上去与原始信号不同.这种信号畸变叫做混叠(alias).出现的混频偏差(alias frequency)是输入信号的频率和最靠近的采样率整数倍的差的绝对值. 不同采样率的采样结果 不同采样率的采样结果 图3给出了一个例子.假设采样频率fs是100HZ, 信号中含有25、70、160、和510Hz的成分. 说明混叠的例子 采样的结果将会是低于奈奎斯特频率(fs/2=50 Hz)的信号可以被正确采样.而频率高于50HZ的信号成分采样时会发生畸变.分别产生了30 、40和10 Hz 的畸变频率 F2、F3和F4 .计算混频偏差的公式是: 混频偏差=ABS(采样频率的最近整数倍-输入频率) 其中ABS表示"绝对值",例如: 混频偏差 F2 = 100–70 = 30 Hz 混频偏差 F3 = (2)100–160 = 40 Hz 混频偏差 F4 = (5)100–510 = 10 Hz 为了避免这种情况的发生,通常在信号被采集(A/D)之前,经过一个低通滤波器,将信号中高于奈奎斯特频率的信号成分滤去.在图3的例子中,这个滤波器的截止频率自然是25HZ .这个滤波器称为抗混叠滤波器. 采样频率应当怎样设置呢?也许你可能会首先考虑用采集卡支持的最大频率.但是,较长时间使用很高的采样率可能会导致没有足够的内存或者硬盘存储数据太慢.理论上设置采样频率为被采集信号最高频率成分的2倍就够了,实际上工程中选用5~10倍,有时为了较好地还原波形,甚至更高一些. 通常,信号采集后都要去做适当的信号处理,例如 FFT 等.这里对样本数又有一个要求,一般不能只提供一个信号周期的数据样本,希望有5~10个周期,甚至更多的样本.并且希望所提供的样本总数是整周期个数的.这里又发生一个困难,有时我们并不知道,或不确切知道被采信号的频率,因此不但采样率不一定是信号频率的整倍数,也不能保证提供整周期数的样本.我们所有的仅仅是一个时间序列的离散的函数 x(n) 和采样频率.这是测量与
分析
定性数据统计分析pdf销售业绩分析模板建筑结构震害分析销售进度分析表京东商城竞争战略分析
的唯一依据. 数据采集系统的构成 数据采集系统结构 上图表示了数据采集的结构.在数据采集之前,程序将对采集板卡初始化,板卡上和内存中的 Buffer 是数据采集存储的中间环节.需要注意的两个问题是:是否使用 Buffer?是否使用外触发启动、停止或同步一个操作? 网络数据采集系统
设计
领导形象设计圆作业设计ao工艺污水处理厂设计附属工程施工组织设计清扫机器人结构设计
1 系 统 概 述 1.1 系统功能与背景 互联网以前所未有的速度发展,成为与报纸、广播、电视相比肩的第四媒体.互联网已经悄悄进入人们的生活.眼下个人网站正如雨后春笋般涌现,但是作为个人网站没有丰富的内容,就没有大的访问量.那么一个新建立的网站,怎么才能使内容丰富呢?简单、快捷的内容采集系统便应运而生. 内容采集系统利用强大的XMLHTTP组件将庞大的互联网信息有效地采集到本地数据库,使其成为网站的内容.本章通过一个简单的实例讲述内容采集系统的设计与实现. 本例的内容采集系统主要完成如下功能. 栏目的管理 一级栏目的增加. 一级栏目的修改. 一级栏目的删除. 二级栏目的增加. 二级栏目的修改. 二级栏目的删除. 2.项目的管理 项目的增加. 项目的修改. 项目的删除. 3.历史记录管理 历史记录的删除. 历史记录的分类显示. 4.数据采集 数据采集主程序. 1.2 系统预览 图6-1是栏目的管理界面.从图中可以看出一级栏目的详细资料,包括栏目的编号、栏目的名称、栏目的描述,以及对某个栏目的操作.单击某个栏目的名字,可以进入该栏目的二级项目管理页面. 图1 一级栏目管理界面 图2是栏目的添加界面.从图中可以看出,进入栏目添加界面后可以添加一级栏目相关信息. 图2 一级栏目添加界面 图3是栏目的修改界面.从图中可以看出,进入栏目修改界面后可以修改一级栏目的相关信息. 图3 一级栏目修改界面 二级项目操作界面和一级栏目操作界面是一样的. 图4是采集项目的管理界面.从图中可以看出项目的详细信息,以及对某个项目的各种操作,包括增加、修改、删除等. 图4 采集项目管理的界面 图5是采集项目添加界面.这是项目添加的第一步--基本设置.在上面的管理导航菜单中显示了添加项目的6个步骤. 图5 采集项目添加界面 图6是修改项目的界面.从图中可以看出,修改项目的界面和添加项目的界面基本是一样的. 图6 修改项目界面 图7是历史记录管理界面.通过该模块可以方便地查看成功记录及失败记录. 图7 历史记录管理界面 图8是项目采集数据初始化界面.系统在该页面进行数据初始化,然后自动转到数据采集页面. 图8 项目采集数据初始化界面 图9是项目采集界面. 图9 项目采集界面 1.3 系统特点 本实例具有以下主要特点. 函数模块化:本实例在函数的设计上采用了模块化的思想.把系统中公用的功能都设计成一个模块.例如,显示分页的函数(ShowPage)、获取网页源代码函数(GetHttpPage),这些都被包含在inc/function.asp中,在开发时候只要通过<%#include file="inc/function.asp"%>就可以调用了,不需要重复编写这些函数,从而提高开发效率. 人性化设计:本实例的导航菜单简单明了,不管用户在程序的什么页面,都可以顺利地返回或者跳转到其他页面. 按照软件工程的流程讲述程序设计,在设计中学习软件工程. 2 系 统 设 计 2.1 系统功能模块划分 本系统是一个简单的文章采集系统,通过6.1.1节的系统功能需求分析,可以将系统细分为几个模块:栏目管理模块、项目管理模块、历史记录模块和数据采集模块4个模块. 1.栏目管理模块 录入栏目的名称、描述等信息.录入第一条记录后,系统会自动进入栏目管理主界面,以便查看录入的信息是否正确.同时可以从栏目管理界面直接进入修改或删除栏目界面,整个操作简单方便,避免了许多错误的发生. 2.项目管理模块 项目管理模块和栏目管理模块一样也包括录入、修改和删除3个功能. 录入项目功能共分6步完成,包括基本设置、列表设置、链接设置、标题/内容设置、采样测试和属性设置. 基本设置包括项目的名称、所属栏目、采集网站地址. 列表设置包括设置截取列表的开始代码和结束代码,以及列表的处理类型. 链接设置包括设置截取列表的开始代码和结束代码. 标题/内容设置包括设置截取标题的开始代码和结束代码,以及截取内容的开始代码和结束代码. 采样测试是检验前面的设置是否正确.如果正确,就会显示正确的标题内容和正文内容.否则需要返回重新设置. 属性设置是设置项目的其他信息. 编辑项目功能和录入项目功能一样,也分6步. 3.历史记录模块 历史记录模块包括查看全部历史记录、成功历史记录和失败历史记录,以及删除历史记录等功能. 4.数据采集模块 数据采集模块是本系统的核心模块,通过该模块可以完成采集功能. 2.2 系统结构设计 根据2.1节的系统设计,可以得到如图6-11所示的系统结构设计图. 图11 系统结构设计图 这就是本系统提供的所有功能.当然,一个功能完善的采集系统还包括很多功能,例如,过滤设置、数据库导入/导出等.本示例系统提供的是一个模板,在此基础上,可以很方便地扩充其他功能 3 数据库设计 数据库在动态程序中有着非常重要的地位,数据库结构设计的好坏将直接对应用系统的效率及实现的效果产生影响.合理的数据库结构设计可以提高数据存储的效率,保证数据的完整和一致. 设计数据库系统时应该首先充分了解用户各个方面的需求,包括现有的及将来可能增加的需求. 3.1 数据库逻辑设计 前面已经详细地分析了该系统所要完成的功能,因此在前面的功能清单的基础上可以很轻松地设计出本示例所需要的数据库系统. 本系统的数据结构比较简单,从分析功能清单可以知道,需要存储的是栏目信息、项目信息、历史记录信息、采集的文章信息. 栏目信息需要保存栏目ID、栏目名称和栏目描述. 项目信息需要保存项目ID、项目名称、一级栏目ID、二级栏目ID、网站名称、网站网址、列表索引页面、截取列表开始标记、截取列表结束标记、截取链接开始标记、截取链接结束标记、截取标题开始标记、截取标题结束标记、截取正文开始标记、截取正文结束标记及采集时间.如果采集类型为批量采集,还需要列表分页类型、列表分页批量类型列表索引页面、索引范围开始及索引范围结束.最后还需要一些文章的属性内容.本系统只使用编辑和内容评分. 历史记录需要保存历史ID、项目ID、一级栏目ID、二级栏目ID、文章ID、文章标题、采集时间、采集文章的源地址及是否成功标记. 文章信息需要保存文章ID、一级栏目ID、二级栏目ID、文章标题、文章内容及采集时间等基本内容.如果需要保存其他信息,还需要设计其他字段.本系统增加了编辑和文章评分两个字段. 在上面的数据库逻辑设计中列出了各个表的字段,各表的主键信息通过各表中的字段就可以看出,例如文章ID在文章信息、历史记录中都有出现,应设为文章信息的主键. 3.2 数据库设计 由于本系统所需的数据结构比较简单,而且数据量也不大,因此采用Access数据库作为数据库设计工具.本章将具体介绍各字段、数据类型等内容. 根据上面的数据库逻辑设计,需要设计4张数据表.由于栏目信息包括一级栏目信息和二级栏目信息,因此需要两张表来存储栏目信息,这样,本系统设计了5张数据表. Channel表保存一级栏目信息,Class表保存二级栏目信息,Project表保存项目信息,History表保存历史记录信息,Info表保存文章信息. 1.Channel表和Class表 Channel表和Class表都包括3个字段:一个是用以标志栏目唯一性的ChannelID/ ClassID字段,数据类型采用自动编号,同时该字段也是Channel/Class表的主键;一个是栏目的名称字段ChannelName/ClassName,数据类型为文本类型;另一个是栏目的描述字段ChannelInfo/ClassInfo,数据类型为文本类型. 2.Project表 Project表包括的字段比较多,如图12所示.其中每个字段所代表的含义可以从图中的说明中看到.ProjectID为该表主键. 图12 Project表 3.History表 History表用于保存历史记录。 4.Info表 此外,还有一个Info表,用于保存采集的内容信息,所有字段如图14所示. 图14 Info表 文章采集系统采集的内容是为文章管理系统服务的,而且Info表、Channel表和Class表是文章管理系统需要的数据表,因此把它们单独保存在数据库Info中.History表和Project表是采集系统的数据表,因此把它们保存在数据库History中. 4 系统通用功能模块设计 在程序设计过程中,有许多功能需要经常使用,比如分页的功能、错误显示功能等.在编程的时候,就需要把它们提取出来,作为单独函数,以方便调用.这些函数就是通用功能模块.这也是一种良好的编程习惯. 4.1 系统文件结构 为方便以后的描述,在这里将本系统的文件结构列出来,如表1所示. 表1 系统文件结构 表1中,所属目录"/"表示系统根目录,因此"/css"表示根目录下的css文件夹,同理"/inc"表示根目录下的inc文件夹. 4.2 数据库连接文件 文件conn.asp主要提供连接数据库的方法.下面主要介绍实现这些方法的代码. 在数据库设计中,设计了两个数据库,一个是保存项目信息和历史记录信息的项目数据库history.mdb,另一个是保存栏目信息和内容信息的内容数据库info.mdb.因此,设计了两个连接数据库对象:conn、connhistory. 定义和初始化连接info数据库字符串、info数据库连接对象和info数据库路径字符串变量,参考代码见例程1. 例程1 定义和初始化连接info数据库变量 dim connstr dim db dim Conn db="data/info.mdb" Set Conn = Server.CreateObject("ADODB.Connection") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db) 连接info数据库,并显示出错报告,参考代码见例程6-2. 例程2 连接info数据库 Conn.Open connstr If Err Then err.Clear Set Conn = Nothing Response.Write "数据库连接出错,请检查连接字符串." Response.End End If 关闭内容数据库对象函数,参考代码见例程3. 例程3 关闭info数据库对象函数 Sub CloseConn() '关闭数据库 Conn.close set Conn=nothing End sub 定义和初始化连接项目数据库字符串、项目数据库连接对象和项目数据库路径字符串变量,参考代码见例程4. 例程4 定义和初始化连接history数据库变量 dim connstrHistory dim dbHistory dim connHistory dbHistory="data/history.mdb" '采集数据库文件的记录 Set connHistory = Server.CreateObject("ADODB.Connection") connstrHistory="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(dbHistory) 连接项目数据库,并显示出错报告,参考代码见例程5. 例程5 连接history数据库 connHistory.Open connstrHistory If Err Then err.Clear Set connstrHistory = Nothing Response.Write "采集数据库连接出错,请检查连接字符串." Response.End End If 关闭项目数据库对象函数,参考代码见例程6. 例程6 关闭history数据库对象函数 Sub CloseConnHistory() On Error Resume Next ConnHistory.close Set ConnHistory=nothing End sub 4.3 数据缓存类文件 文件clsCache.asp是引用的一个第三方类.该类主要的功能是设置缓存,加快系统运行速度.该类主要使用Application对象来设置系统缓存.其实现的代码见例程7. 例程7 clsCache.asp <% '---------------------------- class clsCache '---------------------------- private cache '缓存内容 private cacheName '缓存Application名称 private expireTime '缓存过期时间 private expireTimeName '缓存过期时间Application名称 private path '缓存页URL路径 private vaild '判断缓存是否有效 '类初始化函数,该函数在类被创建的时候自动执行 private sub class_initialize() path=request.servervariables("url") path=left(path,instrRev(path,"/")) end sub '析构函数,该函数在类被关闭的时候自动执行 private sub class_terminate() end sub '获取版本信息属性 Public Property Get Version Version="Version 2004" End Property '获取缓存是否有效属性 public property get valid if isempty(cache) or (not isdate(expireTime)) then vaild=false else valid=true end if end property '获取当前缓存内容属性 public property get value if isempty(cache) or (not isDate(expireTime)) then value=null elseif CDate(expireTime)
typename(varcache2) then verify=false elseif typename(cache)="Object" then if cache is varcache2 then verify=true else verify=false end if elseif typename(cache)="Variant()" then if join(cache,"^")=join(varcache2,"^") then verify=true else verify=false end if else if cache=varcache2 then verify=true else verify=false end if end if end function end class %> 下面简单介绍一下这段程序.这段代码使用了面向对象的编程方法将函数封装在一个类中.本
书
关于书的成语关于读书的排比句社区图书漂流公约怎么写关于读书的小报汉书pdf
不是介绍面向对象的图书,因此不在这里介绍面向对象的编程方法.下面简单介绍该类中的函数. class_initialize()类初始化函数,当类被创建后,执行该函数. class_terminate():析构函数,当类被销毁后,执行该函数. get valid():读取缓存有效性. get value():读取当前缓存内容. let name(str):设置缓存名称,参数为一个字符串,该字符串就是要设置的缓存的名称. let expire(tm):设置缓存过期时间,参数为一个数字,该数字就是要设置的缓存的过期时间. add(varCache, varExpireTime):缓存赋值函数,参数为缓存名称和过去时间. clean():清除缓存内容函数. verify(varcache2):判断缓存是否有效,参数为缓存名称. 下面介绍一下该类的使用方法. 首先,引用该文件,使用include语句,参考代码见例程8. 例8 引用clsCache.asp 第二步,创建类,参考代码见例程9. 例程9 创建缓存类 Set ProjectCache=new clsCache ProjectCache用于创建类的名字. 第三步,调用ProjectCache的函数,参考代码见例程10. 例程10 调用ProjectCache的函数 Call ProjectCache.clean() 这就是缓存类的使用方法.如果还没有看明白的话,没有关系,在后面的章节中还会讲到. 4.4 采集系统核心函数 文件function.asp主要提供内容采集系统的核心方法.下面主要介绍一下实现这些方法的代码. 在讲述这些方法之前,先介绍两个对象--XMLHTTP对象和RegExp对象. 1.XMLHTTP对象 来自MSDN的解释:XMLHTTP提供客户端同HTTP服务器通信的
协议
离婚协议模板下载合伙人协议 下载渠道分销协议免费下载敬业协议下载授课协议下载
.客户端可以通过XMLHTTP对象(MSXML2.XMLHTTP.3.0)向HTTP服务器发送请求并使用微软XML文档对象模型Microsoft XML Document Object Model(DOM)处理回应.XMLHTTP最大的用处是可以更新网页的部分内容而不需要刷新整个页面.在本系统中,XMLHTTP是采集的核心组件. 1)XMLHTTP的方法 Open(bstrMethod,bstrUrl,varAsync,bstrUser,bstrPassword) 对象创建后调用Open方法对Request对象进行初始化.Open方法有5个参数,前3个是必要的,后两个是可选的(在服务器需要进行身份验证时提供).参数的含义如表2所示. 表2 Open方法的参数含义 Send(varBody) VarBody为指令集,可以是XML格式数据,也可以是字符串、流,或者一个无符号整数数组,也可以省略,让指令通过Open方法的URL参数代入. Send方法的参数类型是Variant,可以是字符串、DOM树或任意数据流.发送数据的方式分为同步和异步两种.在异步方式下,数据包一旦发送完毕,就结束Send进程,客户机执行其他的操作;而在同步方式下,客户机要等到服务器返回确认消息后才结束Send进程. 2)XMLHTTP的属性 XMLHTTP的属性如表3所示. 表3 XMLHTTP的属性 XMLHTTP对象中的readyState属性反映出服务器在处理请求时的进展状态.客户端的程序可以根据这个状态信息设置相应的事件处理方法.其状态属性值及其含义如表4所示. 表4 readyState的状态 客户端只有当readyState为4后,才可以处理响应信息.客户端接收到返回消息后,进行简单的处理,基本上就完成了C/S之间的一个交互周期. 3)XMLHTTP使用步骤 首先,创建XMLHTTP对象. 第二,打开与服务端的连接,同时定义指令发送方式,服务网页(URL)和请求权限等.客户端通过Open方法打开与服务端的服务网页的连接.与普通HTTP指令传送一样,可以用GET方法或POST方法指向服务端的服务网页. 第三,用Send方法发送指令. 第四,等待并接收服务端返回的处理结果. 第五,释放XMLHTTP对象. XMLHTTP对象是本系统的核心组件,在下面介绍其他函数时还会提到该组件的使用方法. 2.RegExp对象 RegExp对象提供简单的正则表达式支持功能.RegExp对象是全局对象,RegExp 对象不能直接创建,但始终可以使用. 1)RegExp对象的属性 RegExp对象的属性如表5所示. 表5 RegExp对象的属性 2)RegExp对象的方法 RegExp对象的方法如表6所示. 表6 RegExp对象的方法 Execute方法的正则表达式搜索的设计模式是通过RegExp对象的Pattern来设置的.该方法返回一个Matches集合,其中包含了在被搜索字符串中找到的每一个匹配的Match 对象.如果未找到匹配,Execute 将返回空的Matches集合. Replace方法中被替换的文本的实际模式是通过RegExp对象的Pattern属性设置的. 该方法返回被搜索的字符串的副本,其中的 RegExp对象的Pattern属性已经被设置为要查找的字符串.如果没有找到匹配的文本,将返回原来的被搜索的字符串的副本. Test方法中的正则表达式搜索的实际模式也是通过RegExp对象的Pattern属性来设置的.RegExp.Global属性对Test方法没有影响.如果找到了匹配的模式,Test方法返回True,否则返回False. XMLHTTP对象和RegExp对象就先介绍到这里,如果不明白的话,不用担心,在以后的学习中还会用到.下面开始介绍本系统的核心函数. 3.GetHttpPage函数 首先是GetHttpPage函数.该函数通过使用XMLHTTP组件获取指定网页的源代码,参考代码见例程11. 例程11 GetHttpPage函数 1 Function GetHttpPage(HttpUrl) 2 If IsNull(HttpUrl)=True Or Len(HttpUrl)<18 Or HttpUrl="$False$" Then 3 GetHttpPage="$False$" 4 Exit Function 5 End If 6 Dim Http 7 Set Http=server.createobject("MSXML2.XMLHTTP") 8 Http.open "GET",HttpUrl,False 9 Http.Send() 10 If Http.Readystate<>4 then 11 Set Http=Nothing 12 GetHttpPage="$False$" 13 Exit function 14 End if 15 GetHTTPPage=bytesToBSTR(Http.responseBody,"GB2312") 16 Set Http=Nothing 17 If Err.number<>0 then 18 Err.Clear 19 End If 20 End Function 该函数有一个参数HttpUrl,表示要获取源代码的网页的地址. 该函数代码中,第1行是函数名声明.第2行到第5行判断参数HttpUrl是否有效,如果无效,则退出函数,输出$False$.第6行声明XMLHTTP组件名称.第7行通过server对象创建XMLHTTP组件.第8行打开与服务端的连接并设置发送方式和请求权限.Open函数的参数可以参考表2.第9行发送命令.第10行到第14行判断XMLHTTP的返回状态,如果不为4,就退出函数并输出$False$.这里4表示XMLHTTP对象的readyState属性返回状态.其他的返回状态可以参考表4.只有readyState属性返回状态为4时,客户端程序才可以处理.第15行获取源代码,并将源代码的编码转换成GB2312.转换函数BytesToBstr参考例程12.第16行释放XMLHTTP对象.第17行到第19行,清除错误,防止程序发生异常,导致崩溃. 4.BytesToBstr函数 BytesToBstr函数用于转换源代码的编码类型,参考代码见例程12. 例程12 BytesToBstr函数 1 Function BytesToBstr(Body,Cset) 2 Dim Objstream 3 Set Objstream = Server.CreateObject("adodb.stream") 4 objstream.Type = 1 5 objstream.Mode =3 6 objstream.Open 7 objstream.Write body 8 objstream.Position = 0 9 objstream.Type = 2 10 objstream.Charset = Cset 11 BytesToBstr = objstream.ReadText 12 objstream.Close 13 set objstream = nothing 14 End Function 该函数有两个参数.Body参数是要转换的源代码的字符串,Cset参数是转换的类型.包括GB2312,UTF-8等.在本系统中需要将源代码转换成中文编码,因此Cset为GB2312. 代码第2行定义stream对象的名称.Adodb.Stream是ADO的stream对象,提供存取二进制数据或者文本流,从而实现对流的读、写和管理等操作.第3行创建stream对象.第4行设置stream对象写入数据的类型为二进制字符流.第5行设置stream对象打开的模式.第6行打开stream对象.第7行将要转换的源代码装入对象中.第8行返加对象内数据的当前指针.第9行设置stream对象返回数据的类型文本流.第10行设置stream流返回数据的编码为Cset.第11行读取转换完成的数据并返回.第12行关闭stream对象.第13行释放stream对象. 5.GetBody函数 GetBody函数根据参数截取出需要的字符串,参考代码见例程13. 例程13 GetBody函数 1 Function GetBody(ConStr,StartStr,OverStr,IncluL,IncluR) 2 If ConStr="$False$" or ConStr="" or IsNull(ConStr)=True Or StartStr= "" or IsNull(StartStr)=True Or OverStr="" or IsNull(OverStr)=True Then 3 GetBody="$False$" 4 Exit Function 5 End If 6 Dim ConStrTemp 7 Dim Start,Over 8 ConStrTemp=Lcase(ConStr) 9 StartStr=Lcase(StartStr) 10 OverStr=Lcase(OverStr) 11 Start = InStrB(1, ConStrTemp, StartStr, vbBinaryCompare) 12 If Start<=0 then 13 GetBody="$False$" 14 Exit Function 15 Else 16 If IncluL=False Then 17 Start=Start+LenB(StartStr) 18 End If 19 End If 20 Over=InStrB(Start,ConStrTemp,OverStr,vbBinaryCompare) 21 If Over<=0 Or Over<=Start then 22 GetBody="$False$" 23 Exit Function 24 Else 25 If IncluR=True Then 26 Over=Over+LenB(OverStr) 27 End If 28 End If 29 GetBody=MidB(ConStr,Start,Over-Start) 30 End Function 该函数有5个参数.参数ConStr是将要截取的字符串,参数StartStr设置开始字符串,参数OverStr设置结束字符串,参数IncluL设置是否包含StartStr,参数IncluR设置是否包含OverStr. 第2行到第5行判断参数是否为空,如果为空,则退出程序并返回$False$.第6行和第7行定义临时变量.第8行到第10行将ConStr、StartStr、OverStr全部转换成小写字符串.这一步是为函数InstrB准备的,因为InstrB是区分大小写的.第11行查找字符串StartStr在源字符串ConStr中首次出现的字节位置.如果字符串StartStr不能在源字符串ConStr中找到,则Start返回零.第12行到第19行判断Start是否为零,如果为零,则退出程序并返回$False$,如果不为零,设置start为截取字符串的开始位置.第16行判断IncluL是否为False,如果为False,截取字符串的开始位置并设置为start加上startStr的长度.第20行查找字符串OverStr在源字符串Constr中首次出现的字节位置.如果字符串OverStr不能在源字符串中找到,则Over返回零.第21行到第28行判断Over是否为零,如果为零,则退出程序并返回$False$,如果不为零,设置Over为截取字符串的结束位置.第25行到第27行判断IncleR是否为True,也就是说是否需要包含结束字符串,若是则设置截取字符串的结束位置为Over加上OverStr的长度.第29行使用MidB截取字符串. 6.GetArray函数 GetArray函数用于提取链接的地址,参考代码见例程14. 例程14 GetArray函数 1 Function GetArray(Byval ConStr,StartStr,OverStr,IncluL,IncluR) 2 If ConStr="$False$" or ConStr="" Or IsNull(ConStr)=True or StartStr="" Or OverStr= "" or IsNull(StartStr)=True Or IsNull(OverStr)=True Then 3 GetArray="$False$" 4 Exit Function 5 End If 6 Dim TempStr,TempStr2,objRegExp,Matches,Match 7 TempStr="" 8 Set objRegExp = New RegExp 9 objRegExp.IgnoreCase = True 10 objRegExp.Global = True 11 objRegExp.Pattern = "("&StartStr&").+?("&OverStr&")" 12 Set Matches =objRegExp.Execute(ConStr) 13 For Each Match in Matches 14 TempStr=TempStr & "$Array$" & Match.Value 15 Next 16 Set Matches=nothing 17 If TempStr="" Then 18 GetArray="$False$" 19 Exit Function 20 End If 21 TempStr=Right(TempStr,Len(TempStr)-7) 22 If IncluL=False then 23 objRegExp.Pattern =StartStr 24 TempStr=objRegExp.Replace(TempStr,"") 25 End if 26 If IncluR=False then 27 objRegExp.Pattern =OverStr 28 TempStr=objRegExp.Replace(TempStr,"") 29 End if 30 Set objRegExp=nothing 31 Set Matches=nothing 32 TempStr=Replace(TempStr,"""","") 33 TempStr=Replace(TempStr,"'","") 34 TempStr=Replace(TempStr," ","") 35 TempStr=Replace(TempStr,"(","") 36 TempStr=Replace(TempStr,")","") 37 If TempStr="" then 38 GetArray="$False$" 39 Else 40 GetArray=TempStr 41 End if 42 End Function 该函数有5个参数.参数的意义与GetBody函数一样,这里就不一一介绍了. 函数代码第2行到第5行判断参数是否为空,若为空则退出程序并返回$False$.第6行定义临时变量.第7行初始化变量.第8行建立正则表达式.RegExp对象在本章开始已经介绍了,它不能直接创建,但始终可以用.第9行设置RegExp对象的IgnoreCase属性,区分大小写.第10行设置RegExp对象的Global属性,搜索应用于整个字符串.第11行设置RegExp对象的Pattern属性为正则表达式模式.第12行执行搜索,并返回一个Matches集合.第13行到第15行将Matches集合的元素依次写入字符串变量TempStr中,并以"$Array$"分隔.第16行释放Matches对象.第22行到第25行判断参数IncluL是否为Flase,使用RegExp对象的Replace方法用空字符串替换TempStr中的StartStr,注意在使用Replace方法的时候,RegExp对象的Pattern属性要设置为StartStr.第26行到第29行同第22行到第25行.该函数最后返回一个字符串,该字符串包含ConStr中的所有满足要求的链接. 本系统的核心函数就介绍到这里,下面介绍通用函数. 4.5 通用函数 1.WriteErrMsg函数 WriteErrMsg函数显示错误提示信息,参考代码见例程15. 例程15 WriteErrMsg函数 sub WriteErrMsg(ErrMsg) dim strErr strErr=strErr & "错误信息
本文档为【数据采集系统】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑,
图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
该文档来自用户分享,如有侵权行为请发邮件ishare@vip.sina.com联系网站客服,我们会及时删除。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。
本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。
网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。