蜘蛛机器人代码 asp版
在ASP中常见的错误80004005信息和解决办法
在ASP中常见的错误80004005信息和解决办法错误信息(错误信息我不用翻译成中文了吧,呵呵,大家谅解)Microsoft OLE DB Provider for ODBC Drivers error '80004005'[Microsoft][ODBC Microsoft Access 97 Driver] The Microsoft Jet database engine cannot open the file '(unknown)'. It is already opened exclusively by another user, or you need permission to view its data.原因:这个错误发生在当IIS使用匿名帐号(通常是IUSR)时,该帐号在NT中对数据库所在的目录没有正确的权限.(这就是为什么在Win95和PWS下没问题,因为win95根本就没有目录权限这一说)检查文件和目录的权限. 确定你能够在该目录中有能够新建和删除临时文件的权限。
这些临时文件其实是数据库建立在同一个目录下的文件, 但是要注意的是,有可能这些文件也可能建立在别的目录,例如 /Winnt.使用NT的文件监视程序监视文件失败时到底是访问了什么目录。
这个NT的文件监视程序可以在这个地方下载.如果你对数据库使用了一个网络地址,例如映射地址,就要检查一下共享文件和目录的权限,还要检查一下数据源文件(DSN)是否被别的程序标志成为正在使用中,这些别的程序一般是Visual InterDev,关闭任何一个InterDev中的正打开和数据库连接的项目。
这个错误还可能发生在这种情况:如果在DSN中使用了一个UNC路径(就是通用命名协议),请改用本地路径进行测试,因为如果对本地数据库使用UNC也可能出错。
还可能发生在这种情况,如果服务器要访问Access中的一个表,而这个表却联接在一个网络服务器上。
ASP完整教程(完全ASP编程)
Active Server Pages教程二零零零年二月二日目录第一章引言 (3)第二章简介 (8)第三章ASP基础 (13)第四章脚本基础 (19)第五章脚本变量、函数、过程和条件语句 (22)第六章脚本循环语句 (27)第七章内建Request对象 (30)第八章内建Reponse对象 (36)第九章内建对象Application 和Session (42)第十章Global.asa文件的使用及Chat程序 (48)第十一章内建对象Server (53)第十二章数据库查询语言(1) (57)第十三章数据库查询语言(2) (62)第十四章ActiveX组件 (66)第十五章常用的ASP ActiveX组件 (70)第十六章其它的ASP常用组件 (75)第十七章ADO存取数据库时如何分页显示 (81)第十八章堵住ASP漏洞 (87)第十九章最新的ASP、IIS安全漏洞 (91)第一章引言您的网站是否仍一如既往地保持“静态”?目前呈几何增长的互联网网站中,有相当一部分仍固守“静态”,无形中已大大落后于时代的步伐。
所谓“静态”指的就是网站的网页内容“固定不变”,当用户浏览器通过互联网的HTTP(Hypertext Transport Pr otocol)协议向WEB服务器请求提供网页内容时,服务器仅仅是将原已设计好的静态HTML文档传送给用户浏览器。
其页面的内容使用的仅仅是标准的HTML代码,最多再加上流行的GIF89A格式的动态图片,比如产生几只小狗小猫跑来跑去的动画效果。
若网站维护者要更新网页的内容,就必须手动地来更新其所有的HTML文档。
“静态”网站的致命弱点就是不易维护,为了不断更新网页内容,你必须不断地重复制作HTML文档,随着网站内容和信息量的日益扩增,你就会感到工作量大得出乎想象。
你不禁要问:那么什么是动态网站呢?这就是本文将重点讲述的核心,所谓“动态”,并不是指那几个放在网页上的GIF动态图片,在这里笔者为动态页面的概念制定了以下几条规则:1、“交互性”即网页会根据用户的要求和选择而动态改变和响应,将浏览器作为客户端界面,这将是今后WEB发展的大事所趋。
asp三级联动
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN""/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=gb2312" /><title>无标题文档</title></head><!--#include file="inc/conn.asp" --><%'首先我们设置数据库=============================================='数据库结构'类别1表名称:a 字段:ID,Name 说明:ID为主键是类别1的ID值,Name为类别1的名称'类别2表名称:aa 字段:ID,aID,Name 说明:ID为主键是类别2的ID值,aID为所属类别1的ID值,Name为类别2的名称'类别3表名称:aaa 字段:ID,aID,aaID,Name 说明:ID为主键是类别3的ID值,aID为所属类别1的ID值,aaID为所属类别2的ID值,Name为类别3的名称%><%response.write"1:"&Request.form("s1")&"<BR>"response.write"2:"&Request.form("s2")&"<BR>"response.write"3:"&Request.form("s3")&"<BR>"%><body><!-- 三级联动菜单开始--><script language="JavaScript"><!--<%'二级数据保存到数组Dim count2,rsClass2,sqlClass2set rsClass2=server.createobject("adodb.recordset")'sqlClass2="select * from aa"sqlClass2="select * from t_city"rsClass2.open sqlClass2,conn,1,1%>var subval2 = new Array();//数组结构:一级根值,二级根值,二级显示值<%count2 = 0do while not rsClass2.eof%>subval2[<%=count2%>] = newArray('<%=rsClass2("proid")%>','<%=rsClass2("cityid")%>','<%=rsClass2("cityname")%>')<%count2 = count2 + 1rsClass2.movenextlooprsClass2.close%><%'三级数据保存到数组Dim count3,rsClass3,sqlClass3set rsClass3=server.createobject("adodb.recordset")'sqlClass3="select * from aaa"sqlClass3="select * from t_area"rsClass3.open sqlClass3,conn,1,1%>var subval3 = new Array();//数组结构:二级根值,三级根值,三级显示值<%count3 = 0do while not rsClass3.eof%>subval3[<%=count3%>] = newArray('<%=rsClass3("cityid")%>','<%=rsClass3("areaid")%>','<%=rsClass3("areaname")%>') <%count3 = count3 + 1rsClass3.movenextlooprsClass3.close%>function changeselect1(locationid){document.form1.s2.length = 0;document.form1.s2.options[0] = new Option('==请选择类别==','');document.form1.s3.length = 0;document.form1.s3.options[0] = new Option('==请选择专题==','');for (i=0; i<subval2.length; i++){if (subval2[i][0] == locationid){document.form1.s2.options[document.form1.s2.length] = newOption(subval2[i][2],subval2[i][1]);}}}function changeselect2(locationid){document.form1.s3.length = 0;document.form1.s3.options[0] = new Option('==请选择专题==','');for (i=0; i<subval3.length; i++){if (subval3[i][0] == locationid){document.form1.s3.options[document.form1.s3.length] = newOption(subval3[i][2],subval3[i][1]);}}}//--></script><form name="form1" method="post" action="test1.asp">三级联动:<%Dim count1,rsClass1,sqlClass1set rsClass1=server.createobject("adodb.recordset")'sqlClass1="select * from a"sqlClass1="select * from t_province"rsClass1.open sqlClass1,conn,1,1%><select name="s1" onChange="changeselect1(this.value)"><option>==请选择频道==</option><%count1 = 0do while not rsClass1.eofresponse.write"<option value="&rsClass1("proid")&">"&rsClass1("proname")&"</option>" count1 = count1 + 1rsClass1.movenextlooprsClass1.close%></select><select name="s2" onChange="changeselect2(this.value)"><option>==请选择类别==</option></select><select name="s3"><option>==请选择专题==</option></select><input type="submit" name="Submit" value="提交"></form><!-- 三级联动菜单结束--></body></html>。
机器人原代码
/*============================================================================= ===========【文件名】 STR280-test1.c 【程序功能】综合测试【MCU】 STC12C5A60S2 ofc=外部12M 【编写日期】 whr 2011年12月29日【修改时间】 QXZ 2012年01月05日【修改说明】=============================================================================== =========*/ #include <STC12C5A.H> #include <intrins.h>sbit DIR_R=P1^2; //PWMR的正反转控制位,1代表正 sbit DIR_L=P1^5; //PWML的正反转控制位,1代表正 sbit MOT_DIR1=P2^0; //电机1/3方向 sbit MOT_EN1=P2^1; //电机1/3使能 sbit MOT_DIR2=P2^2; //电机2/4方向 sbit MOT_EN2=P2^3; //电机2/4使能 sbit start_=P3^2; //启动按键sbit SER_BS=P1^6; //接近开关片选 sbit MOT_BS=P1^7; //电机输出片选 sbit LAMP=P3^7; //警灯输出/*~~~~~~用于接收巡线传感器的8位信号~~~~~~~*/ sbit LS_1=P0^0; sbit LS_2=P0^1; sbit LS_3=P0^2; sbit LS_4=P0^3; sbit LS_5=P0^4 ; sbit LS_6=P0^5; sbit LS_7=P0^6; sbit LS_8=P0^7;/*~~~~~~用于接收接近传感器的信号~~~~~~~*/ sbit PS_1=P3^3; sbit PS_2=P3^4; sbit PS_3=P3^5; sbit PS_4=P3^6; bit PS_5; bit P S_6; bit PS_7; bit PS_8;sbit PS_9 =P2^4;sbit PS_10=P2^5; sbit PS_11=P2^6; sbit PS_12=P2^7;/*######变量用途说明########################################### num 用于记录传感器的有效信号数目,以便机器人做出相应的动作 c 用于记录所寻白条数的个数###############################################################*/ unsigned char nu m,c=0,e;#define l 1 //左电机 #define r 2 //右电机 #define rl 3 //左右电机 #define DJ1 4 //手爪电机#define DJ2 5 //横向平移电机 #define DJ3 6 //升降电机 #define DJ4 7 //回转电机 #define j 8 //手爪夹紧 #define s 9 //手爪松开#define qpy 10 //手爪前平移#define hpy 11 //手爪后平移 #define xs 12 //向上升 #define xx 13 //向下降#define wz1 14 //上下位置1(最上位) #define wz2 15 //上下位置2 #define wz3 16 //上下位置3#define wz4 17 //上下位置4#define wz5 18 //上下位置5(最下位) #define qhz 19 //前回转 #define hhz 20//后回转#define ps58 22 //接近开关选择PS_5~PS_8 #define ps912 23 //接近开关选择PS_9~PS_12 #define f 'f' //代表电机正转 #define forward 'f'#define b 'b' //代表电机反转 #define backward 'b'/*=======================================================================【函数原形】:void pwm0_1() 【功能说明】:PCA时钟源控制寄存器计数初值的初始化设置【编写日期】:2011年1月20日========================================================================*/void pwm0_1() {CCON=0x00; CH=0; CL=0;CMOD=0x00;}/*=======================================================================【函数原形】:void PWM_R(unsigned char Fosc_1) 【功能说明】:PWM_R控制寄存器设置【参数说明】:Fosc_0 Fosc_0为占空比设置形参【编写日期】:2011年1月20日========================================================================*/void PWM_R(unsigned int Fosc_0) {CCAP0H=CCAP0L=((Fosc_0)*25)/10; //此代码用于控制输出的占空比 CCAPM0=0X42; //8位PWM输出,无中断 PCA_PWM0=0x00; }/*=======================================================================【函数原形】:void PWM_L(unsigned char Fosc_1) 【功能说明】:PWM_L控制寄存器设置【参数说明】:Fosc_1 Fosc_1为占空比设置形参【编写日期】:2011年1月20日========================================================================*/void PWM_L(unsigned int Fosc_1){CCAP1H=CCAP1L=((Fosc_1)*25)/10; //此代码用于控制输出的占空比 CCAPM1=0X42; //8位PWM输出,无中断 PCA_PWM1=0x00;}/*=======================================================================【函数原形】:void delay_ms(unsigned int T)【参数说明】:T 延时时间设定 T 0~60000 【函数功能】:ms级延时函数(目前所用此时间仅为大概值)【编写日期】:2011年1月20日========================================================================*/ void delay_ms(unsigned int T) {unsigned int CON; unsigned int i;for(i=0;i<T;i++)for(CON=0;CON<500;CON++);}/*=======================================================================【函数原形】:void motor(unsigned char m,unsigned char z,unsigned int n,) 【功能说明】:电机运动【参数说明】:m 电机,z 方向,n 占空比【调用说明】:如:motor(r,f,60) 右电机以60%的速度正转【编写日期】:whr 2011年12月29日========================================================================*/ void motor(unsigned char m,unsigned char z,unsigned int n) {switch (m) {case r: if(z==forward||z==f) {CR=1;PWM_R(n);DIR_R=0;}else if(z==backward||z==b) {CR=1;PWM_R(n);DIR_R=1;} break;case l: if(z==forward||z==f) {CR=1;PWM_L(n);DIR_L=0;} else if(z==backward||z==b) {CR= 1;PWM_L(n);DIR_L=1;} break;case DJ1: if(z==forward||z==f) {MOT_BS=1;MOT_DIR1=0;MOT_EN1=0;} else if(z==backwar d||z==b) {MOT_BS=1;MOT_DIR1=1;MOT_EN1=0;} break; case DJ2: if(z==forward||z==f) {MO T_BS=1;MOT_DIR2=1;MOT_EN2=0;} else if(z==backward||z==b) {MOT_BS=1;MOT_DIR2=0; MOT_EN2=0;}break;case DJ3: if(z==forward||z==f) {MOT_BS=0;MOT_DIR1=1;MOT_EN1=0;} else if(z==backwar d||z==b) {MOT_BS=0;MOT_DIR1=0;MOT_EN1=0;}break;case DJ4: if(z==forward||z==f) {MOT_BS=0;MOT_DIR2=1;MOT_EN2=0;} else if(z==backwar d||z==b) {MOT_BS=0;MOT_DIR2=0;MOT_EN2=0;} break; default:break;} }/*==================================================== 【函数原形】: void stop (unsigned char m) 【参数说明】: m:选择电机【功能说明】: 停止电机转动【调用说明】:如:stop(r) 使右电机的转速为零【编写日期】: whr 2011年12月90日 ====================================================*/ void stop (unsign ed char m) { switch(m) {case r : PWM_R(0);DIR_R=0;break; case l : PWM_L(0);DIR_L=0;break;case rl : CR=0;PWM_R(0);DIR_R=0;PWM_L(0);DIR_L=0;break; case DJ1 : MOT_BS=1;MOT_DIR1=0;MOT_EN1=1;break; case DJ2 : MOT_BS=1;MOT_DIR2=0;MOT_EN2=1;break; case DJ3 : MOT_BS=0;MOT_DIR1=0;MOT_EN1=1;break; case DJ4 : MOT_BS=0;MOT_DIR2=0;MOT_EN2=1; break; default : break; } }/*================================================================ 【函数原形】: void SER_SELECT(unsigned char gd) 【功能说明】: 接近开关选择 PS_5 ~PS_8/ PS_9 ~PS_12【参数说明】: gd: PS_5 ~PS_8: PS58 / PS_9 ~PS_12:PS912 【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ // void SER_S EL(unsigned char psgd) void SER_SEL(unsigned char psgd) {if(psgd==ps58) { SER_BS=0; PS_5=PS_9; PS_6=PS_10; PS_7=PS_11;PS_8=PS_12;}else if(psgd==ps912) { SER_BS=1; } return; }/*================================================================ 【函数原形】: void DJ4J_S(unsigned char js) 【功能说明】: 手爪夹紧/松开【参数说明】: js 夹紧(js=j)/松开(js=s)设定【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ1_JS( unsigned char js) {if(js==j) { motor(DJ1,f,100); while(1) {if(PS_1==0) {stop(DJ1); delay_ms(50); return; }}}else if(js==s){ motor(DJ1,b,100); while(1) {if(PS_2==0) {stop(DJ1); delay_ms(50); return; } }}}/*================================================================ 【函数原形】: void DJ1_PY(unsigned char py) 【功能说明】: 手爪前后平移【参数说明】: py:向前(py=qpy)/向后(py=hpy)设定【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ2_PY( unsigned char py) {if(py==qpy){ motor(DJ2,f,100); while(1) {if(PS_3==0) { stop(DJ2); delay_ms(50); return; }}}else if(py==hpy) { motor(DJ2,b,100); while(1) {if(PS_4==0) {stop(DJ2); delay_ms(50); return; } }}}/*================================================================【函数原形】: void DJ2_SX(unsigned char sx,unsigned char wz) 【功能说明】: 手爪上下升降运动【参数说明】: sx:向上(sx=xs)/向下(sx=xx)设定wz: 1号接近开关(wz1) ;2号接近开关(wz2);3号接近开关(wz3);4号接近开关(wz4)【功能改动说明】:【编写时间】: 2012年1月04日【修改时间】:================================================================== */ void DJ3_SX (unsigned char sx,unsigned char wz) {if(sx==xs){ motor(DJ3,f,100); }else if(sx==xx){ motor(DJ3,b,100); }if(wz==wz1) {while(1){ SER_SEL(ps58); delay_ms(5); if(PS_5==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz2) {while(1) {SER_SEL(ps58); delay_ms(5); if(PS_6==0) {stop(DJ3); delay_ms(50); return;}}}else if(wz==wz3) { while(1) {SER_SEL(ps58); delay_ms(5); if(PS_7==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz4) {while(1) {SER_SEL(ps58); delay_ms(5); if(PS_8==0) {stop(DJ3); delay_ms(50); return; } } }else if(wz==wz5) {while(1) {SER_SEL(ps912); delay_ms(5);if(PS_9==0) {stop(DJ3); delay_ms(50); return; } }}}/*================================================================ 【函数原形】: void DJ3_HZ(unsigned char hz) 【功能说明】: 回转工作【参数说明】: hz:向前回转(hz=qhz)/向后回转(hz=hhz)设定【功能改动说明】: 【编写时间】: 2012年1月04日【修改时间】:==================================================================*/ void DJ4_HZ( unsigned char hz) {if(hz==qhz){ motor(DJ4,b,100); delay_ms(6600); stop(DJ4);delay_ms(500);motor(DJ4,b,100); }else if(hz==hhz) { motor(DJ4,f,100); delay_ms(3400); stop(DJ4);delay_ms(500); motor(DJ4,f,100); }//delay_ms(2000); while(1){SER_SEL(ps912); if(PS_10==0) {stop(DJ4); delay_ms(50); return; }}if(ti!=0){ /*~~~~~~若条件满足则记一个白条~~~~~~~*/ if(num>5) //5个传感器信号为有效判断为一条有效白条{/*~~~~~~寻白条时去除干扰信号的影响~*/ delay_ms(1); num=0;if(LS_1) num++;if(LS_2) num++; if(LS_3) num++; if(LS_4) num++; if(LS_5) num++; if(LS_ 6) num++; if(LS_7) num++;if(LS_8) num++; /*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~*/ if(num>5) {c=c+1; //如条件满足则白条计数标志位加一if(c==ti) {c=0; motor(l,f,30);motor(r,f,30);delay_ms(300); return; }else {delay_ms(600); //跳过所寻白条,参数可根据具体速度设定}} } }/*++++++++++++++++基准速度大于30时的巡线程序++++++++++++++++*/ if(S_B>=30) { /***************************************************** [功能] :纠偏程序[改动说明]:若要改变纠偏力度,只需改变S_B后的数值。
基于蚁群算法的机器人路径规划MATLAB源代码
基于蚁群算法的机器人路径规划MATLAB源代码————————————————————————————————作者: ————————————————————————————————日期:基于蚁群算法的机器人路径规划MATLAB源代码基本思路是,使用离散化网格对带有障碍物的地图环境建模,将地图环境转化为邻接矩阵,最后使用蚁群算法寻找最短路径。
function [ROUTES,PL,Tau]=ACASPS(G,Tau,K,M,S,E,Alpha,Beta,Rho,Q)%%---------------------------------------------------------------% ACASP.m%基于蚁群算法的机器人路径规划%GreenSim团队——专业级算法设计&代写程序% 欢迎访问GreenSim团队主页→%% ---------------------------------------------------------------%输入参数列表% G地形图为01矩阵,如果为1表示障碍物%Tau 初始信息素矩阵(认为前面的觅食活动中有残留的信息素)%K 迭代次数(指蚂蚁出动多少波)% M 蚂蚁个数(每一波蚂蚁有多少个)% S起始点(最短路径的起始点)% E终止点(最短路径的目的点)%Alpha表征信息素重要程度的参数% Beta 表征启发式因子重要程度的参数%Rho 信息素蒸发系数% Q 信息素增加强度系数%%输出参数列表% ROUTES每一代的每一只蚂蚁的爬行路线%PL 每一代的每一只蚂蚁的爬行路线长度%Tau 输出动态修正过的信息素%% --------------------变量初始化----------------------------------%loadD=G2D(G);N=size(D,1);%N表示问题的规模(象素个数)MM=size(G,1);a=1;%小方格象素的边长Ex=a*(mod(E,MM)-0.5);%终止点横坐标if Ex==-0.5Ex=MM-0.5;endEy=a*(MM+0.5-ceil(E/MM));%终止点纵坐标Eta=zeros(1,N);%启发式信息,取为至目标点的直线距离的倒数%下面构造启发式信息矩阵for i=1:Nix=a*(mod(i,MM)-0.5);if ix==-0.5ix=MM-0.5;endiy=a*(MM+0.5-ceil(i/MM));ifi~=EEta(1,i)=1/((ix-Ex)^2+(iy-Ey)^2)^0.5;elseEta(1,i)=100;endendROUTES=cell(K,M);%用细胞结构存储每一代的每一只蚂蚁的爬行路线PL=zeros(K,M);%用矩阵存储每一代的每一只蚂蚁的爬行路线长度%%-----------启动K轮蚂蚁觅食活动,每轮派出M只蚂蚁-------------------- fork=1:K%disp(k);form=1:M%% 第一步:状态初始化W=S;%当前节点初始化为起始点Path=S;%爬行路线初始化PLkm=0;%爬行路线长度初始化TABUkm(S)=0;%已经在初始点了,因此要排除DD=D;%邻接矩阵初始化%%第二步:下一步可以前往的节点DW=DD(W,:);DW1=find(DW<inf);forj=1:length(DW1)if TABUkm(DW1(j))==0endendLJD=find(DW<inf);%可选节点集Len_LJD=length(LJD);%可选节点的个数%% 觅食停止条件:蚂蚁未遇到食物或者陷入死胡同while W~=E&&Len_LJD>=1%%第三步:转轮赌法选择下一步怎么走PP=zeros(1,Len_LJD);for i=1:Len_LJDendPP=PP/(sum(PP));%建立概率分布Pcum=cumsum(PP);Select=find(Pcum>=rand);to_visit=LJD(Select(1));%下一步将要前往的节点%% 第四步:状态更新和记录Path=[Path,to_visit];%路径增加PLkm=PLkm+DD(W,to_visit);%路径长度增加W=to_visit;%蚂蚁移到下一个节点for kk=1:Nif TABUkm(kk)==0DD(W,kk)=inf;DD(kk,W)=inf;endendTABUkm(W)=0;%已访问过的节点从禁忌表中删除DW=DD(W,:);LJD=find(DW<inf);%可选节点集Len_LJD=length(LJD);%可选节点的个数end%% 第五步:记下每一代每一只蚂蚁的觅食路线和路线长度ROUTES{k,m}=Path;if Path(end)==EPL(k,m)=PLkm;elsePL(k,m)=inf;endend%% 第六步:更新信息素Delta_Tau=zeros(N,N);%更新量初始化for m=1:MifPL(k,m)<infROUT=ROUTES{k,m};TS=length(ROUT)-1;%跳数PL_km=PL(k,m);for s=1:TSx=ROUT(s);y=ROUT(s+1);Delta_Tau(x,y)=Delta_Tau(x,y)+Q/PL_km;Delta_Tau(y,x)=Delta_Tau(y,x)+Q/PL_km;endendendTau=(1-Rho).*Tau+Delta_Tau;%信息素挥发一部分,新增加一部分end%% ---------------------------绘图--------------------------------plotif=0;%是否绘图的控制参数if plotif==1%绘收敛曲线meanPL=zeros(1,K);minPL=zeros(1,K);for i=1:KPLK=PL(i,:);Nonzero=find(PLK<inf);PLKPLK=PLK(Nonzero);meanPL(i)=mean(PLKPLK);minPL(i)=min(PLKPLK);endfigure(1)plot(minPL);hold onplot(meanPL);grid ontitle('收敛曲线(平均路径长度和最小路径长度)');xlabel('迭代次数');ylabel('路径长度');%绘爬行图figure(2)axis([0,MM,0,MM])fori=1:MMfor j=1:MMifG(i,j)==1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendendendhold onROUT=ROUTES{K,M};Rx=ROUT;Ry=ROUT;forii=1:LENROUTRx(ii)=a*(mod(ROUT(ii),MM)-0.5);if Rx(ii)==-0.5Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));endplot(Rx,Ry)endplotif2=0;%绘各代蚂蚁爬行图if plotif2==1figure(3)axis([0,MM,0,MM])for i=1:MMfor j=1:MMif G(i,j)==1x1=j-1;y1=MM-i;x2=j;y2=MM-i;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[0.2,0.2,0.2]);hold onelsex1=j-1;y1=MM-i;x2=j;y2=MM-i;x3=j;y3=MM-i+1;x4=j-1;y4=MM-i+1;fill([x1,x2,x3,x4],[y1,y2,y3,y4],[1,1,1]);hold onendendendfork=1:KPLK=PL(k,:);minPLK=min(PLK);pos=find(PLK==minPLK);m=pos(1);ROUT=ROUTES{k,m};LENROUT=length(ROUT);Rx=ROUT;Ry=ROUT;for ii=1:LENROUTRx(ii)=a*(mod(ROUT(ii),MM)-0.5);if Rx(ii)==-0.5Rx(ii)=MM-0.5;endRy(ii)=a*(MM+0.5-ceil(ROUT(ii)/MM));endplot(Rx,Ry)hold onendend源代码运行结果展示。
asp常用代码
翻页:<%Set rs = server.CreateObject("Adodb.RecordSet")rs.open sql,c onn,1,1if not rs.eof thenif request("pagenum")="" thenpagenum=1elseif IsNumeric(request("pagenum")) thenpagenum=Cint(request("pagenum"))elsepagenum=1end ifend ifrs.pagesize=40if pagenum<=0 then pagenum=1if pagenum>rs.pagecount then pagenum=rs.pagecount'response.write "["&pagenum&"]"rs.absolutepage=pagenum '转到要查询的页。
for i=1 to rs.pagesize%>循环内容<%rs.movenextif rs.eof then exit fornextelse%>还没记录!<%end if%><%response.write("每页"&rs.pagesize&"项 共"&rs.recordcount&"项 "&pagenum&"/"&rs.pagecount&" ")if 1 < pagenum then '向上翻页response.write("<a href='?pagenum=1'>首页</a> ")response.write("<a href='?pagenum="&pagenum-1&"'>上一页</a> ")elseresponse.write("<font disabled>首页上一页 </font>")end ifif pagenum >= rs.pagecount then '向下翻页response.write("<font disabled>下一页尾页</font> ")else'response.write("<br>rs.pagecount="&rs.pagecount&"<br>pagenum="&pagenum&"<br>")response.write(" <a href='?pagenum="&pagenum+1&"'>下一页</a> ")response.write("<a href='?pagenum="&rs.pagecount&"'>尾页</a> ")end if%>VB回车换行符:vbCrLf是VB中用于表示“回车换行”的字符串常数(长度为2字节),相当于Chr(13)+Chr(10),或者汇编中的DB 0AH,0DH,$由于是常数,所以不会影响速度。
计算机专业英语-14. 网络爬虫-043
Unit 14网络爬虫网络爬虫是一个计算机程序,它自动地有条不紊地或以非常有序的方式浏览万维网。
网络爬虫还有另外很多名称,如蚂蚁,自动索引编辑器,机器人,网络蜘蛛,网络机器人,或,特别是在交朋结友的社区网站中,叫作网络疾跑器。
这个过程被称为网络爬行或网络蜘蛛。
很多网站,尤其是搜索引擎,把网络蜘蛛当作一种提供最新数据手段。
网络爬虫主要任务是拷贝所有的访问页面,然后搜索引擎负责编写这些下载网页的索引,目的是提供快速搜索。
爬行程序也可用于自动执行维护任务,如在网站上检查链接或验证HTML代码。
此外,它还可用于收集特定类型的信息网页,如大量收集e-mail地址(通常用于发送垃圾邮件)。
网络爬虫的艰巨任务网络爬虫是一种类型的机器人,或者软件代理。
在一般情况下,它开始访问的URL的列表,称为种子。
爬虫在访问这些URLs的时候,它鉴别页面中的所有超链接,并将它们添加到URL的列表中准备访问,称为抓取前沿。
根据一套政策对前沿的URL进行循环式地访问。
网络容量之大意味着爬虫在一个特定的时间内下载的网页数量有限的,所以它需要把下载的内容根据其重要性进行排序。
网页内容的高变化率意味页面可能已经更新,甚至删除。
服务器端软不断件产生的可以爬行的URL数量巨大,这就使得网络抓取工具难以避免检索重复的内容。
(基于URL的)HTTP·GE参数存在着无穷的组合,实际上只有一小部分能够返回独特的内容。
例如,一个简单的在线照片库为用户提供了四种分类选项,三种缩略图选择,两种文件格式,以及一个可有可无的禁用用户提供的内容,相同的内容可以有48个不同的URL进行访问,所有这些都可能链接到该网站。
这个数子组合给产生了一个爬虫必须解决的问题,因为它们必须对通过相对较小的脚本变化无穷的组合排序进行分类,以获取独特的内容。
策略组合爱德华兹等人指出,“既然带宽进行抓取既不是无限的,也没有自由,如果要维持某种保证质量或更新的合理措施,爬行网络就必须要以一种可以升级的和有效的方式进行。
爬虫工具汇总
Arachnid
Arachnid:是一个基于Java的web spider框架.它包含一个简单的HTML剖析器能够分析包含HTML内容的输入流.通过实现Arachnid的子类就能够开发一个简单的Web spiders并能够在Web站上的每个页面被解析之后增加几行代码调用。 Arachnid的下载包中包含两个spider应用程序例子用于演示如何使用该框架。
snoics-reptile
snoics -reptile是用纯Java开发的,用来进行网站镜像抓取的工具,可以使用配制文件中提供的URL入口,把这个网站所有的能用浏览器通过GET的方式获取到的资源全部抓取到本地,包括网页和各种类型的文件,如:图片、flash、mp3、zip、rar、exe等文件。可以将整个网站完整地下传至硬盘内,并能保持原有的网站结构精确不变。只需要把抓取下来的网站放到web服务器(如:Apache)中,就可以实现完整的网站镜像。
3、iSearch
The iSearch PHP search engine allows you to build a searchable database for your web site. Visitors can search for key words and a list of any pages that match is returned to them.
Web-Harvest
Web-Harvest是一个Java开源Web数据抽取工具。它能够收集指定的Web页面并从这些页面中提取有用的数据。Web-Harvest主。
php开源网络爬虫
1、PHPdig是国外非常流行的垂直搜索引擎产品(与其说是产品,不如说是一项区别于传统搜索引擎的搜索技术),采用PHP语言编写,利用了PHP程序运行的高效性,极大地提高除了普通的网页外还包括txt, doc, xls, pdf等各式的文件,具有强大的内容搜索和文件解析功能。
25编程器源码
25编程器源码在这篇文章中,我们将分享25个有趣的编程器源码。
这些源码范围从简单的Hello World程序到复杂的算法和数据结构实现。
无论你是初学者还是有经验的开发者,这些源码都能帮助你提高你的编程技能。
1. Hello World:这是每个编程新手的必备源码。
它打印出'Hello World!',向你展示了如何输出一条简单的消息。
2. 计算器:这个源码将帮助你创建一个简单的计算器,让用户输入数字和运算符,并计算结果。
3. 猜数字游戏:这个源码使用随机数生成一个数字,并要求玩家猜这个数字是多少。
它通过循环和条件语句来实现。
4. 贪吃蛇游戏:这个源码将帮助你创建一个经典的贪吃蛇游戏。
它使用图形库来实现游戏界面,并通过键盘输入来控制蛇的移动。
5. 排序算法:这个源码实现了几种常见的排序算法,如冒泡排序、插入排序和快速排序。
它展示了如何在数组中排序元素。
6. 搜索算法:这个源码实现了几种常见的搜索算法,如线性搜索、二分搜索和广度优先搜索。
它展示了如何在数组或图中查找特定的元素。
7. 文件压缩器:这个源码实现了一个简单的文件压缩算法,可以将文件压缩成较小的文件,并可以解压缩回原始的文件。
8. 文本编辑器:这个源码将帮助你创建一个基本的文本编辑器,可以打开、编辑和保存文本文件。
9. 图像处理器:这个源码实现了一些基本的图像处理算法,如灰度化、边缘检测和图像模糊。
它展示了如何处理图像文件。
10. 网络爬虫:这个源码实现了一个简单的网络爬虫,可以从网页中提取数据并保存到文件中。
11. 邮件客户端:这个源码帮助你创建一个基本的邮件客户端,可以发送和接收邮件。
12. 网站登陆系统:这个源码实现了一个简单的网站登陆系统,可以验证用户的用户名和密码,并授予相应的权限。
13. 日历应用:这个源码将帮助你创建一个简单的日历应用,可以添加、编辑和删除事件。
14. 聊天应用:这个源码实现了一个简单的聊天应用,可以让用户之间进行实时的消息传递。
ASP代码大全
邮件方面:CDONTS:<%Set cdomail = Server.CreateObject("CDONTS.NewMail") '建立邮件对象cdomail.Subject = "Mail Subject" '邮件标题cdomail.From = "Sender's Mail" '发件人的地址cdomail.To = "Email will from" '收件人的地址cdomail.Body = "Mail Body" '邮件的内容cdomail.Send '执行发送%>这种方法发送邮件是最简单的,同时也带来一定的问题,就是很少有服务器会开这项服务!我们写程序,一般情况下都是说要代码模块化,这样方便维护,同时也方便移植。
因此,我在这里将这个发邮件的写成一个子程,在调用的时候可以直接调用(当然,如果你高兴写成函数的话也是可以的,这个主要是看个人兴趣):<%'参数说明'Subject : 邮件标题'MailAddress : 发件服务器的地址,如'Email : 收件人邮件地址'Sender : 发件人姓名'Content : 邮件内容'Fromer : 发件人的邮件地址----------------------------Jmail:Sub SendAction(subject, mailaddress, email, sender, content, fromer)Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUEjmail.logging = true '启用使用日志jmail.Charset = "GB2312" '邮件文字的代码为简体中文jmail.ContentType = "text/html" '邮件的格式为HTML的jmail.ServerAddress = mailaddress '发送邮件的服务器jmail.AddRecipient Email '邮件的收件人jmail.SenderName = sender '邮件发送者的姓名jmail.Sender = fromer '邮件发送者的邮件地址jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Subject = subject '邮件的标题jmail.Body = content '邮件的内容'由于没有用到密抄跟抄送,这里屏蔽掉这两句,如果您有需要的话,可以在这里恢复'jmail.AddRec ipientBCC Email '密件收件人的地址'jmail.AddRec ipientCC Email '邮件抄送者的地址jmail.Execute() '执行邮件发送jmail.Close '关闭邮件对象End Sub'调用此Sub的例子Dim strSubject,strEmail,strMailAdress,strSender,strContent,strFromerstrSubject = "这是一封用JMAIL发送的测试邮件"strContent = "JMail组件发送测试成功!"strEmail = "runbing@"strFromer = "runbing@"strMailAddress = ""Call SendAction (strSubject,strMailaddress,strEmail,strSender,strContent,strFromer)%><%Set jmail = Server.CreateObject("JMAIL.SMTPMail") '创建一个JMAIL对象jmail.silent = true 'JMAIL不会抛出例外错误,返回的值为FALSE跟TRUEjmail.logging = true '启用使用日志jmail.Charset = "GB2312" '邮件文字的代码为简体中文jmail.ContentType = "text/html" '邮件的格式为HTML的jmail.ServerAddress = "Server Address" '发送邮件的服务器jmail.AddRecipient Email '邮件的收件人jmail.SenderName = "SenderName" '邮件发送者的姓名jmail.Sender = "Email Address" '邮件发送者的邮件地址jmail.Priority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Subject = "Mail Subject" '邮件的标题jmail.Body = "Mail Body" '邮件的内容jmail.AddRecipientBCC Email '密件收件人的地址jmail.AddRecipientCC Email '邮件抄送者的地址jmail.Execute() '执行邮件发送jmail.Close '关闭邮件对象%>w3 Jmail4.3组件重新设计了其内部结构——使用Message对象代替原来的单一对象Jmail.smtpmail发送邮件,有些方法需要身份验证的(如163、yahoo等),可以用下面的方法解决:<%Set jmail = Server.CreateObject("JMAIL.Message") '建立发送邮件的对象jmail.silent = true '屏蔽例外错误,返回FALSE跟TRUE两值jmail.logging = true '启用邮件日志jmail.Charset = "GB2312" '邮件的文字编码为国标jmail.ContentType = "text/html" '邮件的格式为HTML格式jmail.AddRecipient Email '邮件收件人的地址jmail.From = "Email From for Sender" '发件人的E-MAIL地址jmail.MailServerUserName = "UserName of Email" '登录邮件服务器所需的用户名jmail.MailServerPassword = "Password of Email" '登录邮件服务器所需的密码jmail.Subject = "Mail Subject" '邮件的标题jmail.Body = "Mail Body" '邮件的内容jmail.Prority = 1 '邮件的紧急程序,1 为最快,5 为最慢,3 为默认值jmail.Send("Server Address") '执行邮件发送(通过邮件服务器地址)jmail.Close() '关闭对象%>----------------------------------------------------------------asp的错误集合(这个要看仔细了哟):ActiveServerPages,ASP0126(0x80004005)-->找不到包含文件MicrosoftOLEDBProviderforODBCDrivers(0x80040E21)-->sql语句出错(数据类型不匹配或表名(字段名)错误或表处于编辑状态,或表不存在于conn打开的数据库中) MicrosoftOLEDBProviderforODBCDrivers(0x80040E14)-->sql语句出错(字段名错误,或数据类型不匹配)MicrosoftOLEDBProviderforODBCDrivers(0x80040E07)-->sql语句出错(要插入或更新的字段的类型与变量数据类型不匹配)MicrosoftOLEDBProviderforODBCDrivers(0x80040E57)-->sql语句出错(要插入或更新的数据溢出)MicrosoftOLEDBProviderforODBCDrivers(0x80040E10)-->sql语句出错(update字段名或要更新的数据类型错误)MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->sql语句出错(要插入或更新的字段的数值不能为空值)MicrosoftOLEDBProviderforODBCDrivers(0x80004005)-->打开数据库出错,没有在指定目录发现数据库MicrosoftOLEDBProviderforODBCDrivers(0x80040E37)-->没有发现表MicrosoftVBscript运行时错误(0x800A000D)-->错误引用rs变量(rs对像已关闭或未定义) MicrosoftVBscript运行时错误(0x800A01C2)-->vbscript脚本错误(vbscript语句出错) MicrosoftVBscript运行时错误(0x800A0006)-->vbscript脚本错误(溢出错误) MicrosoftVBscript编译器错误(0x800A040E)-->缺少loopMicrosoftVBscript编译器错误(0x800A03EA)-->缺少if或endifMicrosoftVBscript编译器错误(0x800A03EE)-->语句未结束(缺少")")MicrosoftVBscript编译器错误(0x800A03F6)-->if语句出错(缺少endif)MicrosoftVBscript运行时错误(0x800A005B)-->缺少setMicrosoftVBscript运行时错误(0x800A0005)-->变量未定义MicrosoftVBscript编译器错误(0x800A03F9)-->if语句缺少thenMicrosoftVBscript编译器错误(0x800A0411)-->dim语句定义错误MicrosoftVBscript编译器错误(0x800A0408)-->sql语句错误ADODB.Recordset(0x800A0BB9)-->sql语句出错(sql语句或conn语句未定义或对一个rs属性进行赋值时发生错误)ADODB.Recordset(0x800A0CC1)-->rs对像出错(rs对像本身不存在或错误地引用了一个不存在的字段名)ADODB.Recordset(0x800A0BCD)-->rs对像出错(记录集中没有记录却对记录集进行操作) ADODB.Recordset(0x800A0E78)-->rs对像出错(记录集不存在,缺少rs.open语句) ADODB.Recordset(0x800A0CC1)-->rs对像出错(引用了一个不存在的字段名)ADODB.Recordset(0x800A0E7D)-->conn定义错误ADODB.Recordset(0x800A0CB3)-->数据库以只读方式打开,无法更新数据ASP 编程中20 个非常有用的例子1.如何用Asp判断你的网站的虚拟物理路径答:使用Mappath方法< p align="center" >< font size="4" face="Arial" >< b >The Physical path to this virtual website is:< /b >< /font >< font color="#FF0000" size="6" face="Arial" >< %= Server.MapPath("\")% >< /font >< /p >2.我如何知道使用者所用的浏览器?答:使用the Request object方法strBrowser=Request.ServerV ariables("HTTP_USER_AGENT")If Instr(strBrowser,"MSIE") < > 0 ThenResponse.redirect("ForMSIEOnly.htm")ElseResponse.redirect("ForAll.htm")End If3.如何计算每天的平均反复访问人数答:解决方法< % startdate=DateDiff("d",Now,"01/01/1990")if strdate< 0 then startdate=startdate*-1avgvpd=Int((usercnt)/startdate) % >显示结果< % response.write(avgvpd) % >that is it.this page have been viewed since November 10,19984.如何显示随机图象< % dim p,ppic,dpicppic=12randomizep=Int((ppic*rnd)+1)dpic="graphix/randompics/"&p&".gif"% >显示< img src="< %=dpic% >" >5.如何回到先前的页面答:< a href="< %=request.serverV ariables("Http_REFERER")% >" >preivous page< /a >或用图片如:< img src="arrowback.gif"alt="< %=request.serverV ariables("HTTP_REFERER")% >" >6.如何确定对方的IP地址答:< %=Request.serverV ariables("REMOTE_ADDR)% >7.如何链结到一副图片上答:< % @Languages=vbs cript % >< % response.expires=0strimagename="graphix/errors/erroriamge.gif"response.redirect(strimagename)% >8.强迫输入密码对话框答:把这句话放载页面的开头< % response.status="401 not Authorized"response.end% >9.如何传递变量从一页到另一页答:用HIDDEN 类型来传递变量< % form method="post" action="mynextpage.asp" >< % for each item in request.form % >< input namee="< %=item% >" type="HIDDEN"value="< %=server.HTMLEncode(Request.form(item)) % >" >< % next % >< /form >10.为何我在asp 程序内使用msgbox,程序出错说没有权限答:由于asp 是服务器运行的,如果可以在服务器显示一个对话框,那么你只好等有人按了确定之后,你的程序才能继续执行,而一般服务器不会有人守着,所以微软不得不禁止这个函数,并胡乱告诉你(:) 呵呵) 没有权限。
机器人程序代码
#include <Servo.h>#define t0 8#define t1 10 // for the interval of headhc#define t2 15 // for the interval of hands servosServo hdservo1; // head servoServo hdservo2;Servo myservo0; // Hands servo definitionServo myservo1;Servo myservo2;Servo myservo3;Servo myservo4;Servo myservo5;Servo myservo6;Servo myservo7; //int LL1=46,LL2=48,LR1=50,LR2=52; //wheel definationint EN1=12,EN2=13,EN3=10;// EN1,EN2 Weel PWM EN3 water gother PWMint WL1=47,WL2=49,WR1=51,WR2=53; // water driver definitionint hm1=30,hm2=32; // water gathering definitionint hspos1 = 0,hspos2 = 0; //head servo1 position1 and head servo 2 positionint bz2=33,bz3=28;int alarmlight=45,alarm=26,lhandlight=38,rhandlight=35;const int echo=42; // echo is the receiving terminal of ultrasonic sensorconst int trig=44; // trig is the trigger terminalof ultrasonic sensor.const int pl=230; // Enable time contral max=230const int pr=230; // Enable time contral max=230float a=0.5; // the proportion for enable timefloat hpos=0,vpos=0; // ruturn for the changed position gap of horizon and vertical shuzhidedirectionint dis=0;int flog=0;// head remarkint j1=37,j2=39,j3=41; //j1 wheel power switch, j2 camera power switch, j3 hands power switchint val=0,i=0,vbl=0; //i hands degree parameter;int s0=0,f0=0;// smog and flame standand valueint DHpin = 40; // Temperature and humidityint smogtest=A12,flametest=A13;byte dat[5];byte read_data(){byte data;for(int i=0; i<8; i++){if(digitalRead(DHpin) == LOW){while(digitalRead(DHpin) == LOW); //等待50us;delayMicroseconds(30); //判断高电平的持续时间,以判定数据是‘0’还是‘1’;if(digitalRead(DHpin) == HIGH)data |= (1<<(7-i)); //高位在前,低位在后;while(digitalRead(DHpin) == HIGH); //数据‘1’,等待下一位的接收;}}return data;}void th_test(){digitalWrite(DHpin,LOW); //拉低总线,发开始信号;delay(30); //延时要大于18ms,以便DHT11 能检测到开始信号;digitalWrite(DHpin,HIGH);delayMicroseconds(40); //等待DHT11 响应;pinMode(DHpin,INPUT);while(digitalRead(DHpin) == HIGH);delayMicroseconds(80); //DHT11 发出响应,拉低总线80us;if(digitalRead(DHpin) == LOW);delayMicroseconds(80); //DHT11 拉高总线80us 后开始发送数据;for(int i=0;i<4;i++) //接收温湿度数据,校验位不考虑;dat[i] = read_data();pinMode(DHpin,OUTPUT);digitalWrite(DHpin,HIGH); //发送完一次数据后释放总线,等待主机的下一次开始信号;}void setup(){ Serial3.begin(9600);Serial2.begin(9600);pinMode(alarmlight,OUTPUT);pinMode(alarm, OUTPUT);//attachInterrupt(2,headvoid,LOW)//*********head definition**********hdservo1.attach(8);hdservo2.attach(9);pinMode(echo,INPUT);pinMode(trig,OUTPUT);pinMode(bz2,INPUT);pinMode(bz3,INPUT);pinMode(j2,OUTPUT);//********wheel definition***********pinMode(LL1,OUTPUT);pinMode(LL2,OUTPUT);pinMode(LR1,OUTPUT);pinMode(LR2,OUTPUT);pinMode(EN1,OUTPUT);pinMode(EN2,OUTPUT);pinMode(j1,OUTPUT);//*************water driver definiton*******pinMode(WL1,OUTPUT);pinMode(WL2,OUTPUT);pinMode(WR1,OUTPUT);pinMode(WR2,OUTPUT);//**********hands definition***********myservo0.attach(0);myservo1.attach(1);myservo2.attach(2);myservo3.attach(3);myservo4.attach(7);myservo5.attach(6);myservo6.attach(5);myservo7.attach(4);pinMode(lhandlight,OUTPUT);pinMode(rhandlight,OUTPUT);pinMode(j3,OUTPUT);pinMode(hm1,OUTPUT);pinMode(hm2,OUTPUT);pinMode(EN3,OUTPUT);//***********sensor definition*****************pinMode(DHpin,OUTPUT);pinMode(smogtest, INPUT);pinMode(flametest, INPUT);}//***************sensor control********************void mdis( ) // function of measuring distance;{digitalWrite(trig, LOW); // 使发出发出超声波信号接口低电平2μsdelayMicroseconds(2);digitalWrite(trig, HIGH); // 使发出发出超声波信号接口高电平10μs,这里是至少10μsdelayMicroseconds(10);digitalWrite(trig, LOW); // 保持发出超声波信号接口低电平int distance = pulseIn(echo, HIGH); // 读出脉冲时间distance= distance/58.0; // 将脉冲时间转化为距离(单位:厘米)dis=distance;}void mdistance() // measure distance{int l=0;headready();for(int n=0;n<=19;n++){headready();mdis();delay(100);l=l+dis;}l=float(l/20.0);Serial3.print("Distance="); Serial3.print(l);Serial3.println("cm");Serial2.print("Distance="); Serial2.print(l);Serial2.println("cm");delay(200);}void ssmfltest(){int i=0;int smval=0,flval=0;for(i=0;i<=9;i++){smval=analogRead(smogtest);flval=analogRead(flametest);s0=s0+smval;f0=f0+flval;delay(200);}s0=s0/10;f0=f0/10;// Serial2.print("s0=");// Serial2.println(s0);// Serial2.print("f0=");// Serial2.println(f0);}void smfltest(){ int i=0,s=0,f=0,m=0,n=0;float s1=0,f1=0;int smval=0,flval=0;for(i=0;i<=9;i++){smval=analogRead(smogtest);flval=analogRead(flametest);s=s+smval;f=f+flval;delay(200);}s=s/10;s1=(float(s-s0)/float(1000-s0));if(s1>0){if(s1>=0.20){ int n=0;for(n=0;n<=14;n++){digitalWrite(alarmlight,HIGH);digitalWrite(alarm,HIGH);delay(200);digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);delay(200);}}Serial3.print("Dangeous gas:"); Serial3.print(s1*100);Serial3.println('%');Serial2.print("Dangeous gas:"); Serial2.print(s1*100);Serial2.println('%');delay(100);}else{digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);Serial3.print("Dangeous gas:");Serial3.println("No dangeous gas");Serial2.print("Dangeous gas:");Serial2.println("No dangeous gas");delay(100);}f=f/10;f1=(float(f-f0)/float(1000-f0));if(f1>0){if(f1>=0.10 && f1<0.30){int n=0;Serial3.print("flame:");Serial3.println("Small-fire" ); Serial2.print("flame:");Serial2.println("Small-fire" ); delay(50);for(n=0;n<=14;n++){digitalWrite(alarmlight,HIGH);digitalWrite(alarm,HIGH);delay(300);digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);delay(200);}}if(f1>=0.30 && f1<0.50){ int n=0;Serial3.print("flame:");Serial3.println("Midding-fire" );Serial2.print("flame:");Serial2.println("Midding-fire" );delay(50);for(n=0;n<=14;n++){digitalWrite(alarmlight,HIGH);digitalWrite(alarm,HIGH);delay(350);digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);delay(150);}}if(f1>=0.50){ int n=0;Serial3.print("flame:");Serial3.println("Heavy-fire" ); Serial2.print("flame:");Serial2.println("Heavy-fire" ); delay(50);for(n=0;n<=10;n++){digitalWrite(alarmlight,HIGH);digitalWrite(alarm,HIGH);delay(400);digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);delay(120);}}}else{digitalWrite(alarmlight,LOW);digitalWrite(alarm,LOW);Serial3.print("flame:");Serial3.println("No-fire" );Serial2.print("flame:");Serial2.println("No-fire" );delay(50);}}void Thtest(){int n=0;for(n=0;n<=7;n++){th_test();delay(200);}Serial3.print("humdity = ");Serial3.print(dat[0], DEC); //显示湿度的整数位;Serial3.print('.');Serial3.print(dat[1],DEC); //显示湿度的小数位;Serial3.println('%');Serial3.print("temperature = ");Serial3.print(dat[2], DEC); //显示温度的整数位;Serial3.print('.');Serial3.print(dat[3],DEC); //显示温度的小数位;Serial3.println('C');delay(300);Serial2.print("humdity = ");Serial2.print(dat[0], DEC); //显示湿度的整数位;Serial2.print('.');Serial2.print(dat[1],DEC); //显示湿度的小数位;Serial2.println('%');Serial2.print("temperature = ");Serial2.print(dat[2], DEC); //显示温度的整数位;Serial2.print('.');Serial2.print(dat[3],DEC); //显示温度的小数位;Serial2.println('C');delay(300);}//********************head action control******************** void headready(){hdservo1.write(80); // the middle position in horizon direction hdservo2.write(140); // the middle position in vicertal direction}void headlook(){hdservo1.write(80);hdservo2.write(155);}void headc(){ int i=0;for(i=80;i>=0;i--){ hdservo1.write(i);if(i%5==0)hdservo2.write(135+(80-i)/5);delay(30);}for(i=0;i<=160;i++){ hdservo1.write(i);if(i%10==0){hdservo2.write(160-i/10);}delay(30);}for(i=160;i>=0;i--){ hdservo1.write(i);if(i%10==0)hdservo2.write(144-(160-i)/10);delay(30);}for(i=0;i<=160;i++){ hdservo1.write(i);if(i%10==0){hdservo2.write(128-i/10);}delay(30);}for(i=160;i>=0;i--){ hdservo1.write(i);if(i%10==0)hdservo2.write(112-(160-i)/10);delay(30);}for(i=0;i<=80;i++){ hdservo1.write(i);if(i==80){ int n=0;for(n=0;n<=38;n++){ hdservo2.write(96+n);delay(20);}}delay(30);}}void headhc(){int maxa=0,maxb=0;int hpos1=0,hpos2=0;for(hspos1 = 80; hspos1 <= 160; hspos1 += 1) {hdservo1.write(hspos1);if(hspos1 % 10 == 0){mdis();if(dis>=maxa){maxa=dis;hpos1=hspos1;}}delay(t1);}for(hspos1 = 160; hspos1>=0; hspos1-=1) {hdservo1.write(hspos1);delay(t0);}for(hspos1 = 0; hspos1 <= 80; hspos1 += 1) {hdservo1.write(hspos1);if(hspos1 % 10 == 0){mdis();if(dis>=maxb){maxb=dis;hpos2=hspos1;}}delay(t1);}if(maxa < maxb)hpos=hpos2;elsehpos=hpos1;hpos=float(hpos-80)/90.0; // if hpos>0,turn left hpos<0, turn right }void headvc(){int maxa=0,maxb=0;int vpos1=0,vpos2=0;for(hspos2 = 135; hspos2 <=160; hspos2 += 1){hdservo2.write(hspos2);if(hspos2 % 10 == 0){mdis();if(dis>=maxa){maxa=dis;vpos1=hspos2;}}delay(t1);}for(hspos2 = 160; hspos2>=90; hspos2-=1){hdservo2.write(hspos2);delay(t0);}for(hspos2 = 90; hspos2 <= 135; hspos2 += 1){hdservo2.write(hspos2);if(hspos2 % 10 == 0){if(dis>=maxb){maxb=dis;vpos2=hspos2;}}delay(t1);}if(maxa < maxb)vpos=vpos2;elsevpos=vpos1;vpos=vpos-130; //vpos>0 is down ,vpos<0 is up//Serial.println(vpos);}//*****************hands control********************* void handready(){digitalWrite(j3,HIGH);myservo0.write(10);myservo1.write(0);myservo2.write(156);myservo3.write(0);myservo4.write(175);myservo5.write(160);myservo6.write(0);myservo7.write(168);}void handshow(){handready();delay(1000);for(i=0;i<=50;i++){myservo1.write(i);myservo2.write(156-i);delay(t2);}for(i=0;i<=1;i++){myservo3.write(45);delay(400);myservo3.write(0);}for(i=51;i<=100;i++) { myservo1.write(i); delay(t2);}for(i=101;i<=126;i++) { myservo0.write(i-80); myservo1.write(i); myservo2.write(196-i); delay(t2);}for(i=126;i>=90;i--){ myservo0.write(i-80); myservo1.write(i); myservo2.write(196-i); delay(t2);}delay(1000);for(i=0;i<=50;i++){myservo5.write(160-i); myservo6.write(i); delay(t2);}for(i=51;i<=100;i++) { myservo5.write(160-i); delay(t2);}for(i=101;i<=126;i++) { myservo4.write(270-i); myservo5.write(160-i); myservo6.write(i-40); delay(t2);}for(i=126;i>=90;i--){ myservo4.write(270-i); myservo5.write(160-i); myservo6.write(i-40); delay(t2);}delay(1000);for(i=0;i<=50;i++){myservo1.write(i);myservo2.write(156-i);myservo5.write(160-i);myservo6.write(i);delay(t0);}for(i=51;i<=90;i++){ myservo1.write(i);myservo5.write(160-i); delay(t0);}for(int n=0;n<=1;n++) { for(i=0;i<=80;i++){myservo0.write(10+i);myservo4.write(175-i);delay(t0);}for(i=0;i<=80;i++){myservo0.write(90-i);myservo4.write(95+i);delay(t0);}}for(i=0;i<=45;i++){myservo2.write(106-i); delay(t0);}for(i=0;i<=45;i++){myservo2.write(50+i); delay(t0);}for(i=0;i<=45;i++){myservo6.write(50+i); delay(t0);}for(i=0;i<=45;i++){myservo6.write(95-i); delay(t0);}handready();}void handopen(){handready();for(i=0;i<=50;i++){myservo1.write(i);myservo2.write(156-i);delay(t2);}digitalWrite(lhandlight,HIGH); for(i=51;i<=100;i++){ myservo1.write(i);delay(t2);}myservo3.write(45);delay(100);for(i=10;i>=0;i--){myservo0.write(i);delay(t2);}for(i=101;i<=128;i++){myservo1.write(i); myservo2.write(193-i); delay(t2+10);}}void handtake(){myservo3.write(0);delay(400);for(i=128;i>=91;i--){myservo1.write(i); myservo2.write(193-i); delay(t2+5);}for(i=0;i<=10;i++){myservo0.write(i);delay(20);}digitalWrite(lhandlight,LOW); for(i=90;i>=51;i--){ myservo1.write(i);delay(t2);}for(i=50;i>=0;i--){myservo1.write(i);myservo2.write(153-i);delay(t2);}handready();}void handput(){handready();for(i=0;i<=80;i++){myservo1.write(i);myservo2.write(156-i);delay(t2);}for(i=80;i<=100;i++){ myservo1.write(i);delay(t2);}delay(400);myservo3.write(45);delay(400);myservo3.write(0);for(i=100;i>=80;i--){ myservo1.write(i);delay(t2);}for(i=80;i>=0;i--){myservo1.write(i);myservo2.write(156-i);delay(t2);}headready();}//************* wheel control********************* void micad( ) // micro-adjust{digitalWrite(j1,HIGH);analogWrite(EN1,200);analogWrite(EN2,200);digitalWrite(LL1,LOW);digitalWrite(LL2,LOW);digitalWrite(LR1,LOW);digitalWrite(LR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);delay(50);}void gostraight(){if(LOW==digitalRead(bz2)){micad();back();delay(200);if(HIGH==digitalRead(bz2)){Stop();headhc();if(hpos> 0 & hpos< 1)turnleft(2500*hpos);else if(hpos> -1 & hpos< 0)turnright(2500*abs(hpos));hpos=0;}}else{digitalWrite(j1,HIGH);analogWrite(EN1,180);analogWrite(EN2,180);digitalWrite(LL1,HIGH);digitalWrite(LL2,LOW);digitalWrite(LR1,HIGH);digitalWrite(LR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);waterstop();}}void turnleft(int t){digitalWrite(j1,HIGH);analogWrite(EN1,220);analogWrite(EN2,220);digitalWrite(LL1,HIGH);digitalWrite(LL2,LOW); //zuozhuan digitalWrite(LR1,LOW);digitalWrite(LR2,HIGH);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);waterstop();delay(t);}void turnright(int t){digitalWrite(j1,HIGH);analogWrite(EN1,220);analogWrite(EN2,220);digitalWrite(LL1,LOW);digitalWrite(LL2,HIGH); //youzhuan digitalWrite(LR1,HIGH);digitalWrite(LR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);waterstop();delay(t);}void back(){if(LOW==digitalRead(bz3)){micad();gostraight();}else{digitalWrite(j1,HIGH);analogWrite(EN1,200);analogWrite(EN2,200);digitalWrite(LL1,LOW);digitalWrite(LL2,HIGH);digitalWrite(LR1,LOW);digitalWrite(LR2,HIGH);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);waterstop();}}void Stop(){digitalWrite(j1,HIGH);analogWrite(EN1,200);analogWrite(EN2,200);digitalWrite(LL1,LOW);digitalWrite(LL2,LOW);digitalWrite(LR1,LOW);digitalWrite(LR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);}//**********Water driver control************** void watergo(){ digitalWrite(j1,HIGH);digitalWrite(WL1,HIGH);digitalWrite(WL2,LOW);digitalWrite(WR1,HIGH);digitalWrite(WR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);Stop();}void waterback(){digitalWrite(j1,HIGH);digitalWrite(WL1,LOW);digitalWrite(WL2,HIGH);digitalWrite(WR1,LOW);digitalWrite(WR2,HIGH);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);Stop();}void waterstop(){digitalWrite(j1,HIGH);digitalWrite(WL1,LOW);digitalWrite(WL2,LOW);digitalWrite(WR1,LOW);digitalWrite(WR2,LOW);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);}//******************water gathering control******************** void wgathering(){int t=2500;handready();delay(200);for(i=0;i<=60;i++){myservo5.write(160-i);myservo6.write(i);delay(t2);}digitalWrite(rhandlight,HIGH);for(i=61;i<=110;i++){ myservo5.write(160-i);delay(t2);}Stop();waterstop();analogWrite(EN3,120);digitalWrite(hm1,LOW);digitalWrite(hm2,HIGH);delay(t);digitalWrite(hm1,LOW);digitalWrite(hm2,LOW);delay(t);digitalWrite(hm1,HIGH);digitalWrite(hm2,LOW);delay(t-65);digitalWrite(j1,LOW);for(i=100;i>=51;i--){ myservo5.write(160-i);delay(t2);}digitalWrite(rhandlight,LOW);for(i=50;i>=0;i--){myservo5.write(160-i);myservo6.write(i);delay(t2);}handready();delay(500);digitalWrite(j3,LOW);}void cameraopen(){digitalWrite(j2,HIGH);digitalWrite(j1,LOW);}void sensortest(){Serial3.println("Current test values:"); Serial2.println("Current test values:"); handready();Thtest();smfltest();}void initial(){digitalWrite(j1,LOW);}void restart(){handready();delay(500);headready();digitalWrite(j1,LOW);digitalWrite(j2,LOW);digitalWrite(j3,LOW);}void loop(){if(flog==0){headready();}if(flog==1){headlook();}val=Serial3.read();vbl=Serial2.read();if(-1!=val){if('Q'==val){Serial3.println("Hello!Everybody!"); } if('S'==val){Stop();waterstop();}if('W'==val){gostraight();delay(2500);}if('E'==val){gostraight();delay(800);}if('A'==val){turnleft(800);}if('D'==val){turnright(800);}if('S'==val){back();delay(1000);}if('Z'==val){watergo();delay(2000);}if('H'==val){handshow();if('C'==val){cameraopen();headc();}if('M'==val){if(s0>0 && f0>0){sensortest();}else{Serial3.println("Please get the safe standard value by sending'O'");}}if('O'==val){ ssmfltest();Serial3.println("Get safe value OK!");}if('R'==val)restart();if('G'==val){wgathering();}if('T'==val){flog=1;handopen();}if('Y'==val){flog=0;handtake();}if('U'==val){handput();}if('L'==val){mdistance();}else if(-1!=vbl){if('w'==vbl){gostraight();delay(1600);}if('e'==vbl){gostraight();delay(400);}if('a'==vbl){turnleft(200);}if('d'==vbl){turnright(200);}if('s'==vbl){back();delay(800);}if('z'==vbl){watergo();delay(2000);}if('h'==vbl){handshow();}if('c'==vbl){cameraopen();headc();}if('m'==vbl){if(s0>0 && f0>0)sensortest();}else{Serial2.println("Please get the safe standard value by sending'o'");}}if('o'==vbl){ ssmfltest();Serial2.println("Get safe value OK!");}if('r'==vbl)restart();if('g'==vbl){wgathering();}if('t'==vbl){flog=1;handopen();}if('y'==vbl){flog=0;handtake();}if('u'==vbl){handput();}if('l'==vbl){mdistance();}}else{initial();}}。
第6章-六足仿生机器人项目设计
图6-2踝关节零件图
图6-3上板零件图
图6-4膝关节零件图
图6-5足零件图
图6-6云台零件图
图6-7踝关节零件图
本节所提供的零件都是3D建模,自行打印完成的,上 述所有模型的尺寸单位都是mm。虽然作者使用的建模软件 是SolidWorks,同学们也可以根据自己平时的喜好和习惯 选用其他的建模软件操作,只要按照上图所给出的尺寸设 计就可以,但是输出文件一定要选择.stl格式的才可以, 因为目前市面上常用的桌面级3D打印机和准工业级3D打印 机仅支持这种文件格式。
3.第12项OPENMV模块是本项目的视觉模块,因其与Arduino兼容性 较好,功能调用较为容易而选用。本模块用两个版本,分别为M4和M7。 M4版本固件版本较低,芯片处理速度低于M7,但是其价格便宜,实现的 功能基本相同,没有特别需求的同学可以选择M4版本。
第13项云台支架本项目使用的是自行建模3D打印的零件,主要目的是降 低开发成本。如果有同学想要性能更好的云台或者完成某些测绘、监控任务 的需求,可自行选装市面上的各种二轴、三轴无刷云台,提高性能的同时不 影响本项目机器人的其他功能实现。
图6-8 固定示意图(1)
图6-9 固定示意图(2)
步骤二: 把膝部舵机和上一步的零件一起固定,固定过程分解图如图6-10、6-11、6-12 所示。
图6-10 固定示意图(1)
图6-11 固定示意图(2)
图6-12 固定示意图(1)
步骤三: 将上一步完成的内容与胫部关节连接件固定,示意图如下图6-13、6-14所 示。
2.openmv与Arduino的通信 OPENMV与Arduino mega2560 连接通信方法如表6-1和图6-27所示。 表6-1对应引脚关系图
ASP打印代码大全
ASP开发必备:WEB打印代码大全这篇文章主要介绍了如何使用ASP控制Web的各种打印效果,它能够控制纵打、横打和页面边距等。
1、控制"纵打"、 "横打"和"页面的边距"。
(1)<script defer>function SetPrintSettings() {// -- advanced featuresfactory.printing.SetMarginMeasure(2) // measure margins in inchesfactory.SetPageRange(false, 1, 3) // need pages from 1 to 3factory.printing.printer = "HP DeskJet 870C"factory.printing.copies = 2factory.printing.collate = truefactory.printing.paperSize = "A4"factory.printing.paperSource = "Manual feed"// -- basic featuresfactory.printing.header = "This is MeadCo"factory.printing.footer = "Advanced Printing by ScriptX"factory.printing.portrait = falsefactory.printing.leftMargin = 1.0factory.printing.topMargin = 1.0factory.printing.rightMargin = 1.0factory.printing.bottomMargin = 1.0}</script>(2)<script language="javascript">function printsetup(){// 打印页面设置wb.execwb(8,1);}function printpreview(){// 打印页面预览wb.execwb(7,1);}function printit(){if (confirm('确定打印吗?')) {wb.execwb(6,6)}}</script></head><body><OBJECT classid="CLSID:8856F961-340A-11D0-A96B-00C04FD705A2"height=0 id=wb name=wb width=0></OBJECT><input type=button name=button_print value="打印"onclick="javascript:printit()"><input type=button name=button_setup value="打印页面设置"onclick="javascript:printsetup();"><input type=button name=button_show value="打印预览"onclick="javascript:printpreview();"><input type=button name=button_fh value="关闭"onclick="javascript:window.close();">------------------------------------------------关于这个组件还有其他的用法,列举如下:WebBrowser.ExecWB(1,1) 打开Web.ExecWB(2,1) 关闭现在所有的IE窗口,并打开一个新窗口Web.ExecWB(4,1) 保存网页Web.ExecWB(6,1) 打印Web.ExecWB(7,1) 打印预览Web.ExecWB(8,1) 打印页面设置Web.ExecWB(10,1) 查看页面属性Web.ExecWB(15,1) 好像是撤销,有待确认Web.ExecWB(17,1) 全选Web.ExecWB(22,1) 刷新Web.ExecWB(45,1) 关闭窗体无提示2、分页打印<HTML><HEAD><STYLE>P {page-break-after: always}</STYLE></HEAD><BODY><%while not rs.eof%><P><%=rs(0)%></P><%rs.movenext%><%wend%></BODY></HTML>3、ASP页面打印时如何去掉页面底部的路径和顶端的页码编号(1)ie的文件-〉页面设置-〉讲里面的页眉和页脚里面的东西都去掉,打印就不出来了。
网页防采集策略,网站防复制方法与防采集破解方法
所有的方法,都是做给不懂技术的人看的!!目前防采集的方法有很多种,先介绍一下常见防采集策略方法和它的弊端及采集对策:一、判断一个IP在一定时间内对本站页面的访问次数,如果明显超过了正常人浏览速度,就拒绝此IP访问。
弊端:1、此方法只适用于动态页面,如:asp\\jsp\\php等...静态页面无法判断某个IP一定时间访问本站页面的次数。
2、此方法会严重影响搜索引擎蜘蛛对其收录,因为搜索引擎蜘蛛收录时,浏览速度都会比较快而且是多线程。
此方法也会拒绝搜索引擎蜘蛛收录站内文件。
采集对策:只能放慢采集速度,或者不采。
建议:做个搜索引擎蜘蛛的IP库,只允许搜索引擎蜘蛛快速浏览站内内容。
搜索引擎蜘蛛的IP库的收集,也不太容易,一个搜索引擎蜘蛛,也不一定只有一个固定的IP地址。
评论:此方法对防采集比较有效,但却会影响搜索引擎对其收录。
二、用javascript加密内容页面弊端:此方法适用于静态页面,但会严重影响搜索引擎对其收录情况,搜索引擎收到到的内容,也都是加密后的内容。
采集对策:建议不采,如非要采,就把解密码的JS脚本也采下来。
建议:目前没有好的改良建议。
评论:建议指望搜索引擎带流量的站长不要使用此方法。
三、把内容页面里的特定标记替换为”特定标记+隐藏版权文字“弊端:此方法弊端不大,仅仅会增加一点点的页面文件大小,但容易反采集。
采集对策:把采集来的含有隐藏版权文字内容的版权文字替掉,或替换成自己的版权。
建议:目前没有好的改良建议。
评论:自己感觉实用价值不大,就算是加上随机的隐藏文字,也等于画蛇添足。
四、只允许用户登陆后才可以浏览弊端:此方法会严重影响搜索引擎蜘蛛对其收录采集对策:目前落伍已经有人发了对策文章,具体对策就看这个吧《ASP小偷程序如何利用XMLHTTP实现表单的提交以及cookies或session的发送》。
建议:目前没有好的改良建议。
评论:建议指望搜索引擎带流量的站长不要使用此方法。
不过此方法防一般的采集程序,还是有点效果的。
asp代码大全:ASP必须知道的精华代码大全
asp代码大全:ASP必须知道的精华代码大全
疯狂代码 / ĵ:http://Asp/Article15994.html 1. _disibledevent=><table border _disibledevent=>2. <body _disibledevent=>3. _disibledevent=>4. _disibledevent=>5. <link rel=\"Shortcut Icon\" document.referrer 16. 最小化、最大化、关闭窗口 <object id=hh1 id=\"clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11\"> <param name=\"Command\" value=\"Minimize\"></object> <object id=hh2 id=\"clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11\"> <param name=\"Command\" value=\"Maximize\"></object>[Page] <OBJECT id=hh3 id=\"clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11\"> <PARAM NAME=\"Command\" value=\"Close\"></OBJECT> <input type=button value=最小化 _disibledevent=><input type=button value=最大化 _disibledevent=><input type=button value=关闭 _disibledevent=>本例适用于IE 17. <% 定义数据库连接些常量 Const adOpenForwardOnly = 0 游标只向前浏览记录不支持分页、Record、BookMark Const adOpenKey = 1 键集游标其他用户对记录说做修改将反映到记录集中但其他用户增加或删除记录不会 反映到记录集中支持分页、Record、BookMark Const adOpenDynamic = 2 动态游标功能最强但耗资源也最多用户对记录说做修改增加或删除记录都将反映 到记录集中支持全功能浏览(ACCESS不支持) Const adOpenStatic = 3 静态游标只是数据个快照用户对记录说做修改增加或删除记录都不会反映到记录集 中支持向前或向后移动 Const adLockReadOnly = 1 锁定类型默认只读不能作任何修改 Const adLockPessimistic = 2 当编辑时立即锁定记录最安全方式 Const adLockOptimistic = 3 只有在Update思路方法时才锁定记录集而在此前其他操作仍可对当前记录进行 更改、插入和删除等 Const adLockBatchOptimistic = 4 当编辑时记录不会被锁定而更改、插入和删除是在批处理方式下完成 Const adCmdText = &H <script language=\"javascript\"><!-function checkNum(str){ str.match(/\\D/)null} alert(checkNum(\"1232142141\")) alert(checkNum(\"123214214a1\"))
asp常用代码大全
asp常用代码大全x1、ASP开始结束符语法:< % %> 文件后缀.asp2、判断语句:判断表单传来的用户名和密码是否正确,并提示If request("username")="admin" thenResponse.write"恭喜,你已经登录成功"ElseResponse.write"对不起,您输入的用户名错误,请返回重输入"End ifIf request("name")="admin" and request("pass")="admin"thenResponse.redirect"admin.asp"ElseResponse.redirect"login.asp"End if3、循环语句:循环显示6条数据库中的记录写法1:for n=1 to 6response.write rs("title")&"< br>"if not rs.eof thenexit forelsers.movenextend ifnext写法二:do while not rs.eofresponse.write rs("title")&"< br>"rs.movenextloop4、常用变量转换函数:Now() 函数返回系统时间Date() 函数返回当前系统日期.CStr(int) 函数转化一个表达式为字符串CInt(string) 将一个表达式转化为数字类型Trim(request("username")) 函数去掉字符串左右的空格Left(rs("title"),10) 函数返回字符串左边第length个字符以前的字符(含第length个字符),一般在限制新闻标题的显示长度的时候用Len(string) 函数返回字符串的长度.5、Access数据库连接代码方法一:db="mydata.mdb" ‘如果放在目录中,就要写明"database/mydata.mdb"Set conn = Server.CreateObject("ADODB.Connection")connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(db)conn.Open connstr方法二:'如果你的服务器采用较老版本Access驱动,请用下面连接方法db="mydata.mdb" ‘如果放在目录中,就要写明"database/mydata.mdb"Set conn = Server.CreateObject("ADODB.Connection")connstr="driver={Microsoft Access Driver (*.mdb)};dbq=" & Server.MapPath(db)conn.Open connstr6、Recordset对象操作数据库语法(1)打开sql语句指定的表中的数据,把这批数据放入rs对象中取出news表中所有的数据放到rs中Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news"Rs.Open SqlStr,conn,1,1取出news表中前6条数据放到rs中Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select top 6 * from news"Rs.Open SqlStr,conn,1,1(2)循环显示6条rs对象中存在的数据,列表显示不带连接的写法for n=1 to 6response.write rs("title")&"< br>"if not rs.eof thenexit forelsers.movenextend ifnext带连接的写法for n=1 to 6response.write "< a href=show.asp?id=rs("id")>"& left(rs("title"),20)&"< /a>< br>"if not rs.eof thenexit forelsers.movenextend ifnext(3)向数据库添加一条数据代码Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news"Rs.Open SqlStr,conn,1,3 ‘注意这里的1,3代表可以写入的打开数据表Rs.addnewRs("title")=trim(request("title"))Rs("neirong")=request("neirong")Rs("date")=now()rs.update ‘真正写入数据库(4)修改一条记录的代码,通过(2)中的连接传递过来了id数值Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news where id="&request("id")Rs.Open SqlStr,conn,1,3 ‘注意这里的1,3代表可以写入的打开数据表Rs("title")=trim(request("title"))Rs("neirong")=request("neirong")Rs("date")=now()rs.update ‘真正写入数据库(5)删除数据库中一条记录,通过连接传递过来了数据得id数值Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news where id="&request("id")Rs.Open SqlStr,conn,1,3 ‘注意这里的1,3代表可以写入的打开数据表rs.delete ‘删除该条数据7、标准Sql语句写法包括取全部记录Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news"Rs.Open SqlStr,conn,1,1 ‘运行sql语句,把数据提出到rs对象中选取几条数据Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select top 6 * from news"Rs.Open SqlStr,conn,1,1 ‘运行sql语句,把6条数据提出到rs 对象中选取一条指定表中id字段数值的数据Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select * from news where id="&request("id")Rs.Open SqlStr,conn,1,1 ‘运行sql语句,把6条数据提出到rs 对象中添加一条表单传过来的数据替换Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="insert into news(title,neirong) values(request("title"), request("neirong"))修改一条指定表中id字段数值的数据,用表单传过来的数据替换Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="update news set title=’"&request("title")&"’,neirong=’"&request("内容")&"’ where id="&request("id")Rs.Open SqlStr,conn,1,3 ‘运行sql语句,把数据提出到rs对象中删除一条指定表中id字段数值的数据Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="delete from news where id="&request("id")Rs.Open SqlStr,conn,1,3 ‘运行sql语句,把数据提出到rs对象中8、当点击按钮时候表单带着的数据传送到哪个文件,在哪里指定?< form method="post" action="addsave.asp">< input type="text" name="title">< input type="text" name="neirong">< input type="submit" name="Submit" value="提交">< /form>9、表单提交来的数据接收并显示到屏幕上的代码response.write request("name")response.write now()response.write trim(request("name"))10、利用Application对象作计数器的语法在网页的头部加入Application.LockApplication("counter") = Application("counter") + 1Application.UnLock在需要显示计数内容的网页的地方,加入下面的语句response.write Application("counter")11、利用Session对象保护后台管理页面admin.asp,防止未登陆用户进入在网站后台网页admin.asp的头部加入下面的代码,if session(admin)< >"ok" thenresponse.redirect"login.asp"response.endend if在网站后台登陆页的密码验证部分标准写法AdmName=Request.Form("Name")AdmPass=Request.Form("Pass")Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="Select * from Admin where name='"&AdmName&"' and pass='"&AdmPass&"'"Rs.Open SqlStr,conn,1,3if Rs.EOF AND RS.BOF thenResponse.Redirect("login.asp")response.endelsesession("admin")="ok"Response.Redirect("admin.asp")response.endend if12、分页代码sql = "select……………………省略了sql语句Set rs=Server.Createobject("ADODB.RECORDSET")rs.Open sql, conn, 1, 1if not rs.eof thenpages = 30 '定义每页显示的记录数rs.pageSize = pages '定义每页显示的记录数allPages = rs.pageCount '计算一共能分多少页page = Request.QueryString("page")'通过浏览器传递的页数’if语句属于基本的排错处理if isEmpty(page) or Cint(page) < 1 thenpage = 1elseif Cint(page) > allPages thenpage = allPagesend ifrs.AbsolutePage = pageDo while not rs.eof and pages > 0'这里输出你要的内容………………pages = pages - 1rs.MoveNextLoopelseResponse.Write("数据库暂无内容!")End ifrs.CloseSet rs = Nothing分页页码连接和跳转页码程序< form Action="v3.asp" Method="GET">< %If Page < > 1 ThenResponse.Write "< A HREF=?Page=1>第一页< /A>"Response.Write "< A HREF=?Page=" & (Page-1) & ">上一页< /A>"End IfIf Page < > rs.PageCount ThenResponse.Write "< A HREF=?Page=" & (Page+1) & ">下一页< /A>"Response.Write "< A HREF=?Page=" & rs.PageCount & ">最后一页< /A>"End If%>< p>输入页数:< input TYPE="TEXT" Name="Page" SIZE="3"> 页数:< font COLOR="Red">< %=Page%>/< %=rs.PageCount%>< /font> < /p>< /form>13、分行列显示图片和产品名称的代码(4列x3行=12个)< %Set Rs=Server.CreateObject("ADODB.RecordSet")SqlStr="select top 12 * from myproduct"Rs.Open SqlStr,conn,1,1i=1%>< table width="90%" border="1" cellspacing="0" sellpadding="0">< tr>< %do while not rs.eof%>< td align="center">< img src="< %=rs("imgurl")%>" width="52" height="120">< br>< %=rs("productname")%>< /td>< % if i mod 4=0 then response.write"< /tr>< tr>"i=i+1rs.movenextlooprs.close%>< /tr>< /table>14、ASP数据库连接之ACCESS-SQLSERVER< %IsSqlData=0 定义数据库类别,0为Access数据库,1为SQL 数据库If IsSqlData=0 ThenAccess数据库datapath ="data/" 数据库目录的相对路径datafile ="data.mdb" 数据库的文件名connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(""&datapath&""&datafile&"") Connstr="DBQ="&server.mappath(""&datapath&""&datafil e&"")&";DRIVER={Microsoft Access Driver (*.mdb)};"ElseSQL数据库SqlLocalName ="(local)" 连接IP [ 本地用 (local) 外地用IP ] SqlUsername ="sa" 用户名SqlPassword ="1" 用户密码SqlDatabaseName="data" 数据库名ConnStr = "Provider=Sqloledb;User ID=" & SqlUsername & "; Password=" & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source=" & SqlLocalName & ";"END IFOn Error Resume NextSet conn=Server.CreateObject("ADODB.Connection")conn.open ConnStrIf Err Thenerr.ClearSet Conn = NothingResponse.Write "数据库连接出错,请检查连接字串。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
蜘蛛机器人代码 asp版.txt男人应该感谢20多岁陪在自己身边的女人。
因为20岁是男人人生的最低谷,没钱,没事业;而20岁,却是女人一生中最灿烂的季节。
只要锄头舞得好,哪有墙角挖不到?<%
' 蜘蛛机器人
function spiderbot()
Dim Url,GetLocationURL
Dim ServerPort,ServerName,ScriptName,QueryString
ServerName = Request.ServerVariables("SERVER_NAME")
ServerPort = Request.ServerVariables("SERVER_PORT")
ScriptName = Request.ServerVariables("SCRIPT_NAME")
QueryString = Request.ServerVariables("QUERY_STRING")
Url="http://"&ServerName
If ServerPort <> "80" Then Url = Url & ":" & ServerPort
Url=Url&ScriptName
If QueryString <>"" Then Url=Url&"?"& QueryString
GetLocationURL=Url
dim agent: agent = lcase(request.servervariables("http_user_agent"))
dim Bot: Bot = ""
if instr(agent, "googlebot") > 0 then Bot = "Google"
if instr(agent, "mediapartners-google") > 0 then Bot = "Google Adsense"
if instr(agent, "baiduspider") > 0 then Bot = "Baidu"
if instr(agent, "sogou spider") > 0 then Bot = "Sogou"
if instr(agent, "yahoo") > 0 then Bot = "Yahoo!"
if instr(agent, "msn") > 0 then Bot = "MSN"
if instr(agent, "ia_archiver") > 0 then Bot = "Alexa"
if instr(agent, "iaarchiver") > 0 then Bot = "Alexa"
if instr(agent, "sohu") > 0 then Bot = "Sohu"
if instr(agent, "sqworm") > 0 then Bot = "AOL"
if instr(agent, "yodaobot") > 0 then Bot = "Yodao"
if instr(agent, "iaskspider") > 0 then Bot = "Iask"
if len(Bot) > 0 then
Dim oConn, dbPath, adOpenDynamic, adLockPessimistic,sqll
set oConn=server.createobject("ADODB.connection")
oConn.Open
"DBQ="+server.mappath("./zhizhu/bot.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
Dim oRS
set oRS=Server.Createobject("ADODB.Recordset")
sqll="select * from bot"
oRS.open sqll, oConn,2,2
oRS.AddNew
oRS("bot") = bot
oRS("shijian") = now()
oRS("url") = GetLocationURL
oRS.Update
oRS.Close
oConn.close
end if
end function
%>
<%call spiderbot()%>
这个用来记录搜索站的蜘蛛,从而写入到名为 bot.mdb的数据库里
<% dim conn,rs,connstr
connstr="DBQ="+server.mappath("bot.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};"
set conn=server.createobject("ADODB.CONNECTION")
conn.open connstr
set rs=server.createobject("adodb.recordset")
sql="select * from bot order by id desc"
rs.open sql,conn,1,1
%>
<html >
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
<style type="text/css">
<!--
body,td,th {
font-size: 12px;
border: 1px solid #CCCCCC;
}
p {
margin: 0 0 5px 0;
}
-->
</style>
</head>
<body>
<table width="60%" border="1" align="center" cellpadding="0" cellspacing="0">
<tr>
<td width="20" height="30">ID</td>
<td>蜘蛛</td>
<td>来访时间</td>
<td>页面URL</td>
</tr>
<%do while not rs.eof %>
<tr>
<td><%=rs("id")%></td>
<td><%=rs("bot")%></td>
<td><%=rs("shijian")%></td>
<td><%=rs("url")%></td>
</tr>
<%rs.movenext
loop
rs.close
%>
</table>
</body>
</html>
<% set rs=nothing
conn.close
set conn=nothing
%>
以上代码为读取bot.mdb数据库中的蜘蛛访问数据
只能读取,不能删除
:-)。