因为Str調用的是一个网頁的源代码,要实现的功能是,找到开始与结束间的字符并返回.现在发现了一个問題,就是如何STR过长的话,b:=pos(e,Str); 总是返回0,也就是找不到...
如果找的是网頁开头的<title>,那就没問題...怎么会这样,要如何攺进?谢了...//调用
Htm:= idhttp1.get(URL);
Str:=GetStr('<H2>','</H2>',Htm);//取得开始到结束间的字符//函数
function GetStr(s:String;e:String;Str:widestring):string;
var
  a, b,l: Integer;
begin
    Result:='';
    a:=pos(s,Str);  //开始
    b:=pos(e,Str);    //结束
    l:=length(s);  //长度
    Result := copy(Str,(a+l),(b-a-l)); 
end;

解决方案 »

  1.   

    貌似 pos 函数 只能处理255以内的吧 。。
      

  2.   

    我在你的另一贴中不是给了一段类似的代码吗,是否有问题。
    http://topic.csdn.net/u/20080109/23/88319f29-0242-4f5a-890f-0974075608b9.html
      

  3.   

    我已经测试过,在Mome1里面拷贝了几段类似的都没有问题,而且这个问题根本就很简单,所以建议你检查一下获取的字串的过程是否正确。还有个问题,就是我是按你说的要求只是针对<A>dfgdfgdfg</A>的形式写的,其实,更多的应该是<A fsdfgdfgdfgds>dfasdsdfsad</A>这种形式,所以第一个查找不正确倒是有可能,既然第一个查找不正确,第二个查找不正确就可能了。对这种形式,必须要3次查找才正确,而且还有小写形式<a></a>。另外,别人解答问题只是给你参考,你可以改进的,针对上述几种形式,代码可以为:uses StrUtils;var
      a, b: Integer;
      s: string;
    begin
      a := PosEx('<A', Memo1.Text, 1);
      if a = 0 then
        a := PosEx('<a', Memo1.Text, 1);
      if a = 0 then Exit;            // 不存在<a或<A退出
      a := PosEx('>', Memo1.Text, a + 2);
      if a = 0 then Exit;            // 语法错误退出
      Inc(a);
      b := PosEx('</A>', Memo1.Text, a);
      if b = 0 then
        b := PosEx('</a>', Memo1.Text, a);
      if b = 0 then Exit;           // 无结束标记,错误退出
      s := Copy(Memo1.Text, a, b - a);
      ShowMessage(s);
    end;
      

  4.   


    回楼上..原因我查到了,应该不是函数的問題..进入函数GetStr后打印出来的STR,还是完整的..但是b:=pos(e,Str) 这一个过程就出错..我怀疑是POS不能过长的字符的原故...不然,您试一下:
    Htm:=   idhttp1.get('http://www.163.com'); 我查一下..先...
      

  5.   


    回楼上,我也试过了用PosEx 发现同样的问题,攺成POS后还是一样奇怪......
      

  6.   

    其实maozefa,你的方法没错..但如果进入POS或POSEX的字符过长,就不行了...
      

  7.   

    我想PosEx应该是可以的,你打开Delphi的WebSnap的源码看看,里面很多对html文档的搜索都是使用它。 
      

  8.   

    不管pos,posex都可以找很长的字串,绝没问题。