2 wonderwiller wonderwiller 于 2015.07.16 17:30 提问

请问delphi大牛 为什么这段代码的外层循环没有执行?

procedure TForm1.Button1Click(Sender: TObject);
var
sUrl:string;
ihMyIdHttp:TIdHTTP;
ihMyIdHttp1:TIdHTTP;
iFrom:Integer;
iTo:Integer;
i:Integer;
sInfo:string;
sName:string;
list:TStringList;
o:Integer;
p:Integer;
list1:TStringList;
list2:TStringList;

s公司名称:string;
s会员级别:string;
s联系人:string;
sQQ:string;
s电话:string;
s移动电话:string;
s传真:string;
s网址:string;

sSubInfo:string;
begin

ListView1.Items.Clear;

if (Edit1.Text='') or (Edit2.Text='') then
begin
ShowMessage('请输入搜索范围');

    Exit;

end;

iFrom:=StrToInt(Edit1.Text);
iTo:=StrToInt(Edit2.Text);

ListView1.ViewStyle:=vsReport;

ihMyIdHttp:=TIdHTTP.Create(nil);

for i := iFrom to iTo do
begin

sUrl:='http://www.sg560.com/company/cate_area-0/date_key_/p'+i.ToString+'.html';

ShowMessage(sUrl);
sInfo:=ihMyIdHttp.Get(sUrl);

sInfo:=CopyStr(sInfo,'<div class="result-list-content">','<div class="clearfix">');

SplitString(sInfo,'<a class="g-imgTxt-tl" href="',list);

ihMyIdHttp1:=TIdHTTP.Create(nil);
for o := 0 to list.Count-1 do
    begin
      p:=o;
      p:=p*2+1;
      if p=21 then
      Exit;


      SplitString(list[p],'" title="',list1);
      s网址:='http://www.sg560.com'+list1[0];

      SplitString(list1[1],'"',list2);
      s公司名称:=list2[0];


      sSubInfo:=ihMyIdHttp1.Get(s网址);

      sSubInfo:=CopyStr(sSubInfo,'<div class="header">','<div class="mright">');

      s会员级别:=CopyStr(sSubInfo,'<div class="name2">','</div>');
      s会员级别:=s会员级别+':第'+CopyStr(sSubInfo,'<span class="num">','</span>')+'年';

      s联系人:=CopyStr(sSubInfo,'<p class="mlp2">','<a');
      s联系人:=CopyStr(s联系人,'<span>','</span>');

      sQQ:=CopyStr(sSubInfo,'&uin=','&site');

      s电话:=CopyStr(sSubInfo,'电 话:','<br />');


      s移动电话:=CopyStr(sSubInfo,'移动电话:','<br />');


      s传真:=CopyStr(sSubInfo,'传 真:','</p>');


      if s会员级别<>'免费会员' then
      begin

       with ListView1.Items.Add do
        begin
          //Caption:=IntToStr('1');
          SubItems.Add('22');
          SubItems.Add(s公司名称);
          SubItems.Add(s会员级别);
          SubItems.Add(s联系人);
          SubItems.Add(sQQ);
          SubItems.Add(s电话);
          SubItems.Add(s移动电话);
          SubItems.Add(s传真);
          SubItems.Add(s网址);


          try
            listview1.Items[listview1.Items.Count-1].MakeVisible(true);
          except
            on E:Exception do
            ShowMessage('异常:'+E.Message);
          end;

      end;



    end;

end;

ihMyIdHttp.Free;
ihMyIdHttp1.Free;

end;

end;

6个回答

lyhoo163
lyhoo163   Rxr 2015.08.07 12:08
for o := 0 to list.Count-1 do
begin
  p:=o;
  p:=p*2+1;
  if p=21 then
  Exit;
  SplitString(list[p],'" title="',list1);
  s网址:='http://www.sg560.com'+list1[0];
  SplitString(list1[1],'"',list2);
  s公司名称:=list2[0];
  sSubInfo:=ihMyIdHttp1.Get(s网址);
  sSubInfo:=CopyStr(sSubInfo,'<div class="header">','<div class="mright">');
  s会员级别:=CopyStr(sSubInfo,'<div class="name2">','</div>');
  s会员级别:=s会员级别+':第'+CopyStr(sSubInfo,'<span class="num">','</span>')+'年';
  s联系人:=CopyStr(sSubInfo,'<p class="mlp2">','<a');
  s联系人:=CopyStr(s联系人,'<span>','</span>');
  sQQ:=CopyStr(sSubInfo,'&uin=','&site');
  s电话:=CopyStr(sSubInfo,'电 话:','<br />');
  s移动电话:=CopyStr(sSubInfo,'移动电话:','<br />');
  s传真:=CopyStr(sSubInfo,'传 真:','</p>');
  if s会员级别<>'免费会员' then
  begin
  with ListView1.Items.Add do
  begin
      //Caption:=IntToStr('1');
    SubItems.Add('22');
    SubItems.Add(s公司名称);
    SubItems.Add(s会员级别);
    SubItems.Add(s联系人);
    SubItems.Add(sQQ);
    SubItems.Add(s电话);
    SubItems.Add(s移动电话);
    SubItems.Add(s传真);
    SubItems.Add(s网址);
    try
      listview1.Items[listview1.Items.Count-1].MakeVisible(true);
    except
      on E:Exception do
      ShowMessage('异常:'+E.Message);
    end;
  end;
end;

在循环中,你的循环变量o,在循环体内没有使用,即使你循环了100次,都是一个结果。

可能:
ist1[0]; list2[0]; 中的零0应该为变更or

lyhoo163
lyhoo163   Rxr 2015.08.07 12:09

ist1[0]; list2[0]; 中的零0应该为变更o

bdmh
bdmh   Ds   Rxr 2015.07.16 17:33

for i := iFrom to iTo do如果是这句,那就检查两个变量的值
如果是for o := 0 to list.Count-1 do,那就差list中有没有数据,也许SplitString分割失败了

wonderwiller
wonderwiller 大哥 你好 你看我下面发的 程序运行图 再给分析一下吧 谢谢
2 年多之前 回复
wonderwiller
wonderwiller   2015.07.16 17:34

运行后
只看到执行一次的效果
没有执行循环
如图
图片说明
请问大神

哪里错了 如何解决
谢谢

wonderwiller
wonderwiller   2015.07.16 17:34

运行后
只看到执行一次的效果
没有执行循环
如图
图片说明
请问大神

哪里错了 如何解决
谢谢

suiyunonghen
suiyunonghen   2015.07.17 08:55

。。代码太长,囧,要检查代码逻辑的,我觉得还是自己看合适点,调试一下就明白了

Csdn user default icon
上传中...
上传图片
插入图片