又是一个关于d2009,INDY的问题(15)

  • 主题发起人 主题发起人 terry_zhou82
  • 开始时间 开始时间
T

terry_zhou82

Unregistered / Unconfirmed
GUEST, unregistred user!
不知道是不是INDY10的bug,我用memo1.lines.add(idhttp1.get('www.263.net'));为是么有中文字的地方都是乱码啊?高了半天也不行。
 
怎么提取里面的东西呢?好像看到有人说用正规表达式,但是我看了源文件,都是表格格式的啊
 
这个问题,自己解决了。现在有出来了一个新问题。就是在提取方面。htm源文件为:。。。</tr><tr><td align="center">气温</td><td>15℃/ 11℃</td><td>16℃ / 11℃</td><td>18℃ / 9℃</td><td>20℃ / 10℃</td><td>18℃ / 11℃</td><td>19℃ / 10℃</td><td>14℃ / 9℃</td></tr><tr>我的代码如下:var rStream: TStringStream;begin rStream:= TStringStream.Create('', TEncoding.Default); IdHTTP1.Get('http://qq.ip138.com/weather/zhejiang/hangzhou.htm',rstream); statusbar1.Panels[1].Text :=rStream.DataString; p:=pos('气温</td>',StatusBar1.Panels[1].Text)+Length('</td>'); statusbar1.Panels[1].Text :=copy(statusbar1.Panels[1].Text,p+2,10);问题就是每次都会把</TD>这个字样也显示出来,我要怎么样才可以把它给剔除啊?
 
有高人知道吗?
 
高手都去哪里了?
 
用pos找到位置,用delete删除。论坛类似的东西很多。不知道回答的是你想要的不。其实用正则表达式也行,盒子上有例子
 
p:=pos('气温</td>',StatusBar1.Panels[1].Text)+9;// 123456789 statusbar1.Panels[1].Text :=copy(statusbar1.Panels[1].Text,p,10);
 
找一个类似XML的解析组件就可以。
 
to楼上的wqf,都不行,万一温度是9/11这种情况呢?
 
上面的问题搞定了。还有还有一点就是,如果我要提取下面的内容<tr> <td align="center">天气</td><td><img src="/image/b1.gif" alt="多云" /><img src="/image/b7.gif" alt="小雨" />
多云转小雨</td><td><img src="/image/b3.gif" alt="阵雨" />
阵雨</td><td><img src="/image/b7.gif" alt="小雨" /><img src="/image/b3.gif" alt="阵雨" />
小雨转阵雨</td><td><img src="/image/b7.gif" alt="小雨" /><img src="/image/b1.gif" alt="多云" />
小雨转多云</td><td><img src="/image/b7.gif" alt="小雨" /><img src="/image/b1.gif" alt="多云" />
小雨转多云</td><td><img src="/image/b1.gif" alt="多云" />
多云</td><td><img src="/image/b1.gif" alt="多云" />
多云</td> </tr> <tr>就只要提取第一行的话,我的代码如下,但问题来了,如果是2个字节,如“多云”,5个字节,“小雨转多云”。就会把后面的</TD>也显示出来。procedure TForm1.Button2Click(Sender: TObject);var rStream: TStringStream;begin rStream:= TStringStream.Create('', TEncoding.Default); IdHTTP1.Get('http://qq.ip138.com/weather/qinghai/gonghe.htm',rStream); statusbar1.Panels[1].Text :=rStream.DataString; p:=pos('/>
',StatusBar1.Panels[1].Text)+Length('</td>'); if p>=4 then begin statusbar1.Panels[1].Text :=copy(statusbar1.Panels[1].Text,p+2,4); end; if p>=5 then begin statusbar1.Panels[1].Text :=copy(statusbar1.Panels[1].Text,p+2,8); end;end;这么打代码好像不行啊。有谁会解决吗?
 
有没有高手知道怎么改啊?
 
没人会解决?
 
用 正则表达式 三
 
告诉我你的邮箱,我把我修改的代码发送给你,你需要把这些文件放到项目文件所在的目录,build all一下。
 
谢谢楼上的。zhouying2003@hotmail.com
 
还有,最好不要用正则表达式。
 
邮件已经发送出去,你查收一下。
 
teclick,BUILDING了,没有反应,可否给我具体的代码啊,这么些个文件,看不打懂
 
这些文件不是我写的,是indy的代码,有部分对中文没有处理好,我只是修改了一下indy的源代码。
 
谢谢teclick,这题没有解决,到时帮我把以前的一个问题解决了。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
D
回复
0
查看
1K
DelphiTeacher的专栏
D
I
回复
0
查看
625
import
I
后退
顶部