Duvida Capturando IP

Delphi

23/03/2008

Galera to com um dúvida aki num código pra pegar um IP baseando no site q agente dá, o código é esse :

procedure TForm1.Button1Click(Sender: TObject);
var
texto,resultado:String;
i:integer;
begin
texto:=IdHTTP.Get(´http://checkip.dyndns.org´);
 for i:=0 to length(texto) do
  begin
   if (texto[i] in [´0´..´9´]) or (texto[i] = ´.´) then
    begin
     resultado :=resultado + texto[i];
     Edit1.Text:=resultado;
    end;
 end;
end;

end.


eu entendo ele praticamente todo só tenho uma dúvida nessa parte aki
resultado :=resultado + texto[i];


pq ´resultado := resultado + texto[i] ´ e não ´resultado := texto[i]´ ?
dessa última maneira ´resultado := texto[i]´ ele pega somente a ultima string dá página q é ´ 2 ´ no caso o final do meu IP...queria entender o pq disso !

flw


Psyjacko

Psyjacko

Curtidas 0

Respostas

Marco Salles

Marco Salles

23/03/2008

pq ´resultado := resultado + texto[i] ´ e não ´resultado := texto[i]´ ?


Pq tem que acumular no Loop ( for )

Se voce fizer somente assim :

´resultado := texto[i] ;

a variável resultado em cada inserção do Loop , tera seu conteudo apagado e substituido pelo valor de Texto[i]

o Que se faz com a instrução ´resultado := resultado + texto[i] é uma concatenação de String ... Como se fosse Somar o que tem na Variavel
resultado e acrescentar no Final de seu conteudo o valor de texto[i];

Perceba ainda que existe um erro de performace no codigo original postado por voce
a instrução : Edit1.Text:=resultado; esta dentro do Loop , quando o correto era ficar fora do Loop

var
texto,resultado:String;
i:integer;
begin
texto:=IdHTTP.Get(´http://checkip.dyndns.org´);
 for i:=0 to length(texto) do
     if (texto[i] in [´0´..´9´]) or (texto[i] = ´.´) then
        resultado :=resultado + texto[i];
  //fora do Loop
 Edit1.Text:=resultado;
end;



GOSTEI 0
Psyjacko

Psyjacko

23/03/2008

vo botar um exemplo me corrija se eu estiver errado , vamos supor que o conteúdo do site é isso aqui :

Your ip : 192.168.0.1


resultado por padrão começa como vazio certo ? No caso a cada loop naquelas condições do IF ele iria ler o conteúdo e concatenar do jeito q vc falou , a primeira concatenação iria ocorrer no ´ 1 ´ ai ele iria concatenar
´ vazio ´ + ´ 1 ´
depois resultado ia receber ´ 1 ´ ai ele iria dinovo
´ 1 ´ + ´ 9 ´


seria isso ?
valeu


GOSTEI 0
Psyjacko

Psyjacko

23/03/2008

esquecí de complementar e iria assim até o final do loop de acordo com o IF


GOSTEI 0
Marco Salles

Marco Salles

23/03/2008

vo botar um exemplo me corrija se eu estiver errado , vamos supor que o conteúdo do site é isso aqui :

Citação:
Your ip : 192.168.0.1 resultado por padrão começa como vazio certo ? No caso a cada loop naquelas condições do IF ele iria ler o conteúdo e concatenar do jeito q vc falou , a primeira concatenação iria ocorrer no ´ 1 ´ ai ele iria concatenar Citação: ´ vazio ´ + ´ 1 ´ depois resultado ia receber ´ 1 ´ ai ele iria dinovo Citação: ´ 1 ´ + ´ 9 ´ seria isso ? valeu


sim é isto mesmo .. Ate o fim do Loop sempre selecionando pelo IF


GOSTEI 0
Paullsoftware

Paullsoftware

23/03/2008

Olá amigo, se você tem onde hospedar uma página simples em PHP você poderia simplesmente fazer o seguinte:
<?php echo $_SERVER[´REMOTE_ADDR´];?>
retorna o IP de conexão e mais como esse script é executado no servidor, o cliente que é o que o IdHTTP captura receberia apenas o IP de conexão...

sIPServer := trim( idHttp.Get(´http://www.seusite.com.br/getíp.php´) );


simples não? eu faço assim e funciona perfeitamente!!! :wink:


GOSTEI 0
POSTAR