MemoryStream vers string?
Bonjour
J'essaye d'utiliser le composant HTTPCLI de ICS pour télécharger une page web puis le composant TPerlRegEx pour en extraire des informations.
Le problème est que HTTPCLI utilise un TMemoryStream pour récupérer la page, alors que TPerlRegEx attend un string.
J'ai essayé une fonction qui convertit, mais D2007 génère une erreur "Incompatible types":?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43
|
function StreamToText(oStream : TMemoryStream ): String;
var
oSL : TStringlist;
begin
oSL := TStringlist.Create;
oSL.LoadFromStream(oStream);
result := oSL.Text;
oSL.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WebPage : String;
begin
With HttpCli1 do begin
URL := 'www.acme.com';
RcvdStream := TMemoryStream.Create;
try
Get;
except
ShowMessage('Oops');
RcvdStream.Free;
Exit;
end;
RcvdStream.Seek(0,0);
//E2010 Incompatible types: 'TMemoryStream' and 'TStream'
WebPage := StreamToText(RcvdStream);
RcvdStream.Free;
end;
PerlRegEx1.RegEx := '<title>(.+)</title>';
PerlRegEx1.Options := [preCaseLess];
//TPerlRegEx attend une string
PerlRegEx1.Subject := WebPage;
If PerlRegEx1.Match then begin
ShowMessage(PerlRegEx1.SubExpressions[1]);
end else begin
ShowMessage('Not found');
end;
end; |
Quelqu'un aurait-il une idée sur la cause du problème?
Merci.
Contrôle de type et Transtypage
Bonjour,
Je ne connais pas le composant HTTPCLI de ICS mais il semble que HTTPCLI n' utilise pas un TMemoryStream.
Modifies ton code ou utilise le débogueur pour confirmer le type de RcvdStream.
Et si il s'agit d'un type hérité tu peux le caster.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
function StreamToText(oStream : TMemoryStream ): String;
var
oSL : TStringlist;
begin
oSL := TStringlist.Create;
oSL.LoadFromStream(oStream);
result := oSL.Text;
oSL.Free;
end;
procedure TForm1.Button1Click(Sender: TObject);
var
WebPage : String;
begin
With HttpCli1 do begin
URL := 'www.acme.com';
RcvdStream := TMemoryStream.Create;
ShowMessage(RcvdStream.ClassName);
try
Get;
except
ShowMessage('Oops');
RcvdStream.Free;
Exit;
end;
RcvdStream.Seek(0,0);
//E2010 Incompatible types: 'TMemoryStream' and 'TStream'
WebPage := StreamToText(TMemoryStream(RcvdStream));
RcvdStream.Free;
end;
PerlRegEx1.RegEx := '<title>(.+)</title>';
PerlRegEx1.Options := [preCaseLess];
//TPerlRegEx attend une string
PerlRegEx1.Subject := WebPage;
If PerlRegEx1.Match then begin
ShowMessage(PerlRegEx1.SubExpressions[1]);
end else begin
ShowMessage('Not found');
end;
end; |
Quelqu'un aurait-il une idée sur la cause du problème?
a+