GARANTIR DESCONTO

Fórum Duvida Capturando IP #355768

23/03/2008

0

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

Responder

Posts

23/03/2008

Marco Salles

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;



Responder

Gostei + 0

23/03/2008

Psyjacko

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


Responder

Gostei + 0

23/03/2008

Psyjacko

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


Responder

Gostei + 0

23/03/2008

Marco Salles

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


Responder

Gostei + 0

24/03/2008

Paullsoftware

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:


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar