Duvida Capturando IP
Galera to com um dúvida aki num código pra pegar um IP baseando no site q agente dá, o código é esse :
eu entendo ele praticamente todo só tenho uma dúvida nessa parte aki
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
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
Curtidas 0
Respostas
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
23/03/2008
vo botar um exemplo me corrija se eu estiver errado , vamos supor que o conteúdo do site é isso aqui :
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
seria isso ?
valeu
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
23/03/2008
esquecí de complementar e iria assim até o final do loop de acordo com o IF
GOSTEI 0
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:
sim é isto mesmo .. Ate o fim do Loop sempre selecionando pelo IF
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
23/03/2008
Olá amigo, se você tem onde hospedar uma página simples em PHP você poderia simplesmente fazer o seguinte:
simples não? eu faço assim e funciona perfeitamente!!! :wink:
<?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