网站建设| 数据库类| 图形图象| 程序设计| 现代办公| 操作系统| 考试认证| 网络技术| 软件工程| 电脑相关| 文学作品
网站开发| 网页制作| 操作系统| 图象图形| 考试认证| 数据库类| 程序设计| 硬件技术| 现代办公| 网络技术| 笑话频道
 
您的位置: 电脑书库首页-> 电脑文摘-> 程序设计-> Delphi/Pascal-> DELPHI的通配符比较A

DELPHI的通配符比较A
作者:佚名 来源:InterNet 加入时间:2004-11-25
相关文章
  • DELPHI的通配符比较(第五版
  • 相关书籍:
       DELPHI的通配符比较
                      
                  作者:李均宇  email:     e271828@163.net或者MSSQLserver2000@163.com或者OKMYdelphi@163.net
     
        DELPHI的功能比VB强是公认的,但在一些小事小节上却有时比不上VB方便,例如VB中有SENDKEY()可以很方便地模拟键盘按键,但在DELPHI中就比较繁些.又如VB中有LIKE来轻易实现通配符的比较,但在DELPHI中却找不到,为此在处于自由状态下的我尚有心情时便自已动手来作一个自定义的函数来实现这个功能,以防应急时无心情再作这种小程序.这种小程序束之高阁无用,不如拿出来让它发出几分光和热.
        程序的算法先在子串的末尾加上‘?*’,再读取子串,查找子串中的通配符之间的字符,亦即子串中的子串,然后在源串中依次查找是否含有子串中的子串,不过实现起来还是十分费些周折.
    function   isABClikeAX(abc,ax:string):boolean;   //abc是源串,ax是子串
    var
    abcstart,axstart,abclength,axlength:integer;
    endpartabc,endpartax,subax:string;
    temp,abcwww,axwww:integer;
    begin //aaa
    temp:=0;
    abcstart:=1;
    axstart:=1;
    axwww:=1;
    abcwww:=1;
    abclength:=length(abc);
    axlength:=length(ax);
    isabclikeax:=true;
    while  axstart<=axlength  do
      begin//bbb
        if ax[axstart]='?'  then
        begin
        inc(axstart);
        inc(abcstart);
        if  abcstart> abclength then
        begin
         isabclikeax:=false;
        break;
        end;
        continue;
        end;
        if  ax[axstart]='*'  then
        begin
        inc(axstart);
        temp:=1;
        axwww:=axstart;
        abcwww:=abcstart;
        continue;
        end;
        if not(ax[axstart]  in  ['?','*'] ) then
        begin//ccc
        endpartax:=copy(ax,axstart,axlength-axstart+1)+'?*';

    subax:=copy(endpartax,1,min(pos('?',endpartax),pos('*',endpartax))-1);
        axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
        endpartabc:=copy(abc,abcstart,abclength-abcstart+1);
        if ((pos(subax,endpartabc)<>0) and (temp=1 )) or ((pos(subax,endpartabc)=1) and (temp=0)) then
        begin  //ddd
        if temp=1  then      temp:=0;
        abcstart:=abcstart+(pos(subax,endpartabc)+length(subax)-1) ;
        // axstart:=axstart+min(pos('?',endpartax),pos('*',endpartax))-1;
        end   //ddd
        else   //ddd
        begin  //ddd
          if temp=0  then
          begin
          axstart:=axwww;
          abcwww:=abcwww+1;
          abcstart:=abcwww;
          temp:=1;
          continue;
          end;
        isabclikeax:=false;
        break;
        end;  //ddd
        end;//ccc
      end;//bbb
    end;//aaa

    FUNCTION islike(abc,ax:string):boolean;
    begin
    islike:=isABClikeAX(abc,ax);
    end;
    FUNCTION widecard(abc,ax:string):boolean;
    begin
    widecard:=isABClikeAX(abc,ax);
    end;

    注意USES MATH,因为用到MIN(),也可以用IF语句来代替MIN(),但不够明白.


     



    [文章录入员:fightter]

    相关文章
  • DELPHI的通配符比较(第五版
  • 相关书籍:
    本站推荐内容

    近期主机类热搜关键词:
    美国服务器 美国服务器租用 海外服务器租用 国外服务器租用

    Delphi/Pascal
    C/C++/VC
    C++Builder
    Basic/VB类
    Delphi/Pascal
    Java编程
    FORTRAN
    其它
    电脑教程阅读排行
    ·DELPHI下的多线程程序设计(...
    ·Delphi与Excel的亲密接...
    ·Delphi实现串口通信的常用的...
    ·Delphi中初始化.Ini文件...
    ·Delphi中用于读写(I/O)...
    ·谈谈Delphi中的类和对象
    ·Delphi编译错误中文手册
    ·Delphi中关于TApplic...
    ·OPENGL图形程序设计
    ·SQL的基本操作