CSDN首页 空间 新闻 论坛 Blog 下载 读书 网摘 搜索 .NET Java 视频 接项目 求职 在线学习 买书 程序员 通知
可用分押宝游戏火热进行中... 专题改版:Java Web 专题
CSDN社区
搜索 收藏 打印 关闭
CSDN社区 >  Web 开发 >  ASP

这个关于逻辑搜索的类调试有问题啊

楼主bear6(bear)2003-12-04 19:58:41 在 Web 开发 / ASP 提问

词组搜索    
  词组里面每一个词都将被检索    
  例如:   小强1   小名1   小强强   小小强    
   
  逻辑搜索    
  支持   And   和   Or   运算符.    
  例如:   小明   And   小强   And   小小强  
   
  复合条件:  
  例如:(小小明   Or   小明)   And   (小强   Or   小小强)    
  例如:(小小明   Or   小名)   And   小小强  
  例如:   ROOT1   And   (广东人   Or   北京人)    
   
   
  -----------------------------------------------------------  
  Class   CreateQueryString  
   
  Public   objReg  
  Public   intStart  
  Public   strField  
  Private   objNode2  
  Private   strText  
   
  Public   Property   Let   QueryString(   strValue   )  
  strText   =   Lcase(   strValue   )  
  End   Property  
   
  Private   Sub   Class_Initialize()  
  Set   objReg   =   new   RegExp  
  strField   =   "(标题+文章)"  
  End   Sub  
   
  Private   Sub   Class_Terminate()  
  Set   objReg   =   Nothing  
  End   Sub  
   
  Public   Default   Function   GetText()  
  Dim   blnRes  
  Dim   strSky  
  With   objReg  
  .IgnoreCase   =   true  
  .Global   =   True  
  .Pattern   =   "\s"  
  blnRes   =   .Test(   strText   )  
  End   With  
  If   (Not   blnRes)   Then  
  intStart   =   2  
  GetText   =   strField   &   "   like   '%"   &   strText   &   "%'"  
  Else  
  objReg.Pattern   =   "\sand|\sor"  
  blnRes   =   objReg.Test(   strText   )  
  If   blnRes   Then  
  strSky   =   check()  
  If   strSky   =   False   Then  
  GetText   =   wahaha()  
  Else  
  GetText   =   strSky  
  End   if  
  Else  
  GetText   =   wahaha()  
  End   if  
  End   If  
  End   Function  
   
  Private   Function   wahaha()  
  Dim   strTer  
  Dim   strLikes  
  Dim   strOrs  
  Dim   strI  
  Dim   objRe  
  strTer   =   ""  
  strLikes   =   "   or   ("   &   strField   &   "   like   '%"  
  strOrs   =   "%')"  
  objReg.Pattern   =   "(\S*\S)"  
  Set   objRe   =   objReg.Execute(strText)  
  For   Each   strI   In   objRe    
  strTer   =   strTer   &   strLikes   &   strI   &   strOrs  
  Next  
  wahaha   =   Mid(   strTer   ,   4   )  
  intStart   =   3  
  End   Function  
   
  Private   Function   CheckYes(   strMode   ,   intCount)  
  Dim   objNode1  
  objReg.Pattern   =   strMode  
  Set   objNode1   =   objReg.Execute(   strText   )  
  If   objNode1.Count   <   1   Then  
  CheckYes   =   True  
  Else  
  Set   objNode2   =   objNode1(   0   )  
  If   objNode2.subMatches.Count   <   intCount   Then  
  CheckYes   =   True  
  End   If  
  End   If  
  End   Function  
   
  Private   Function   ORAND()  
  Dim   strSSS  
  Dim   strCCC  
  Dim   strAAA  
  Dim   a143  
  Dim   i  
  Dim   objN  
  Dim   blnTru  
  Dim   blnBBB  
  strSSS   =   "("   &   strField   &   "   like   '%"  
  strCCC   =   "%')"  
  strAAA   =   ""  
  n1   =   0  
  blnTru   =   True  
  blnBBB   =   True  
   
  objReg.Pattern   =   "(\S*\S)"  
  Set   objN   =   objReg.Execute(   strText   )  
  a143   =   objN.Count   -   1  
  If   (objN.Item(   a143   )   =   "and")   Or   (objN.Item(   a143   )   =   "or")   Then    
  ORAND   =   False  
  Exit   Function  
  End   if  
  For   Each   i   In   objN  
  If   blnTru   Then    
  If   (i   <>   "and")   And   (i   <>   "or")   Then  
  blnTru   =   False  
  strAAA   =   strAAA   &   strSSS   &   i   &   strCCC  
  Else  
  blnBBB   =   false  
  Exit   for  
  End   if  
  Else  
  If   (i   =   "and")   Or   (i   =   "or")   Then  
  blnTru   =   True  
  strAAA   =   strAAA   &   i  
  Else  
  blnBBB   =   False  
  Exit   For  
  End   if  
  End   if  
  Next  
  If   (Not   blnBBB)   Then  
  ORAND   =   False  
  Else  
  ORAND   =   strAAA  
  intStart   =   4  
  End   if  
  End   Function  
   
   
  Private   Function   check()  
  Dim   re  
  Dim   re1  
  Dim   re2  
  Dim   re3  
  Dim   str  
  Dim   str1  
  Dim   a1  
  Dim   a2  
  Dim   a3  
  Dim   a4  
  str   =   strField   &   "   like   '%"  
  str1   =   "%'"  
  With   objReg  
  .Pattern   =   "^\(.+\)\s(and|or)\s"  
  re   =   .Test(   strText   )  
  .Pattern   =   "\s(and|or)\s\(.+\)$"  
  re3   =   .Test(   strText   )  
  End   With  
  If   re   And   re3   Then  
  If   CheckYes(   "^\((\S*\S)   (\bor\b|\band\b)   (\S*\S)\)   (and|or)   \((\S*\S)   (\bor\b|\band\b)   (\S*\S)\)$"   ,   6   )   Then  
  check   =   False  
  Else  
  With   objNode2  
  a1   =   .submatches(0)  
  a2   =   .submatches(2)  
  a3   =   .submatches(4)  
  a4   =   .submatches(6)  
  check   =   "("   &   str   &   a1   &   str1   &   "   "   &   .submatches(1)   &   "   "   &   str   &   a2   &   str1   &   ")   "   &_  
  .submatches(3)   &   "   ("   &   str   &   a3   &   str1   &   "   "   &   .submatches(5)   &   "   "   &   str   &   a4   &   str1   &   ")"  
  intStart   =   5  
  End   With  
  End   If  
  ElseIf   re   Then  
  If   CheckYes(   "^\((\S*\S)   (\bor\b|\band\b)   (\S*\S)\)   (and|or)   (.+)"   ,   4   )   Then  
  check   =   False  
  Else  
  With   objNode2  
  a1   =   .submatches(0)  
  a2   =   .submatches(2)  
  a3   =   .submatches(4)  
  check   =   "("   &   str   &   a1   &   str1   &   "   "   &   .submatches(1)   &   "   "   &   str   &   a2   &   str1   &   ")   "   &_  
  .submatches(3)   &   "   ("   &   str   &   a3   &   str1   &   ")"  
  intStart   =   5  
  End   With  
  End   If  
  ElseIf   re3   Then  
  If   CheckYes(   "(.+)   (and|or)   \((\S*\S)   (\bor\b|\band\b)   (\S*\S)\)$"   ,   4   )   Then  
  check   =   False  
  Else  
  With   objNode2  
  a1   =   .submatches(0)  
  a2   =   .submatches(2)  
  a3   =   .submatches(4)  
  check   =   "("   &   str   &   a1   &   str1   &   ")   "   &   .submatches(1)   &   "   ("   &   str   &   a2   &   str1   &   "   "   &_  
  .submatches(3)   &   "   "   &   str   &   a3   &   str1   &   ")"  
  intStart   =   5  
  End   With  
  End   If  
  Else  
  check   =   ORAND()  
  End   If  
  End   Function  
   
  End   Class  
  -------------------------注意-----------------------------  
  替换好的字符串并不是完整的SQL语句.只是生成SQL语句的WHERE关键字后面的表达式.发送到ASP程序的时候.你可以在前面加上  
  "select   id,标题,name,TableName   from   SearchAll   where   "  
  这样类似的SQL语句  
  -------------------------VBScript例子-----------------------------  
  Dim   objROOT1  
  Set   objROOT1   =   new   CreateQueryString  
  objROOT1.QueryString   =   strText   '====传入要替换的字符串  
  objROOT1.strField   =   "要查询的字段名字"   '===如果不设置.默认值是"(标题+文章)"  
  strText   =   objROOT1()   '=========得到替换好的SQL语句  
  If   (objQueryString.intStart   =   4)   Then  
  Call   Msgbox("启动按逻辑搜索")  
  End   If  
  Set   objROOT1   =   Nothing    
  问题点数:0、回复次数:4Top

1 楼bear6(bear)回复于 2003-12-04 20:01:45 得分 0

各位帮忙看看啊  
   
  或者有更好的源代码提供bearsmail@tom.comTop

2 楼bear6(bear)回复于 2003-12-04 20:05:14 得分 0

谢谢大家了Top

3 楼bear6(bear)回复于 2003-12-04 22:07:51 得分 0

有没有人知啊  
  我急啊Top

4 楼llm6(llm6)回复于 2003-12-07 20:12:41 得分 0

关注中Top

相关问题

  • 类库调试
  • asp.net怎么调试类?
  • 关于vb.net中类的调试,急!!!!!!!!!!
  • 有一文件搜索引擎,在2k下调试,VC说
  • 调试
  • ========调试???????????========
  • 调试
  • 类库输出类型项目的调试问题!!!
  • 请问,怎样在eclipse+Lomboz的环境下面调试类!?谢谢!(不是要调试.jsp,而是调试.java文件)
  • Jbuilder5中能够调试CMP类型的EJB吗?

关键词

  • objreg
  • blnres
  • strtext
  • 搜索

得分解答快速导航

  • 帖主:bear6

相关链接

  • Web开发类图书

广告也精彩

反馈

请通过下述方式给我们反馈
反馈
提问
网站简介|广告服务|VIP资费标准|银行汇款帐号|网站地图|帮助|联系方式|诚聘英才|English|问题报告
世纪乐知(北京)网络技术有限公司 版权所有, 京 ICP 证 020026 号
北京创新乐知广告有限公司 提供技术支持
Copyright © 2000-2007, CSDN.NET, All Rights Reserved
GongshangLogo