https://foro.gambas-es.org/viewtopic.php?f=1&t=1538&p=8969#p8969
-----------------------------------
soplo
Miercoles, 06 Abril 2011, 20:00

Re: Como Incrementar Un Ip De Dentro De Un Textbox?
-----------------------------------
pero hombre, si es muy fácil.

Pongamos una ip que tiene las siguientes posibilidades
XXX.XXX.XXX.XXX
Las X son obligatoriamente números y cada grupo son obligatoriamente tres. osea que un grupo puede ser 011 ó 001 pero no puede ser ni 1 ni 11

Planteado ese problema a resolver puede hacerlo de dos formas. En cualquier caso tienes que preguntar los cuatro grupos que definen una ip. Para ello puedes hacerlo con cuatro textboxes y que en medio haya un label con un punto para que a la vista quede como es debido. La otra opción es que lo preguntes todo en un textbox. En ese caso tienes que controlar en ese textbox que solo se admitan números y el punto y que lo escrito sea sintácticamente correcto.

Bien, el caso es que yo en un caso imaginario tengo un textbox que contiene una ip 192.168.1.5 y deseo incrementarla en uno.

Pues el primer paso es obtener los distintos grupos
[code linenumbers=false syntax=gambas]private sub Inc_Ip
Dim Grupos as new string[]
Dim ValorGrupo as integer
Grupos=split(textbox.text,".")[/code]
Y con eso tienes en grupos[0] el primer grupo. En grupos[1] el segundo grupo. En grupos[2] el tercer grupo. En Grupos[3] el cuarto grupo.

Ahora lo que hay que hacer es ver si el incremento va en el cuarto grupo, tercer grupo, segundo grupo, primer grupo.
[code linenumbers=false syntax=gambas]ValorGrupo=cint(grupos[3]) 'convertir a entero el valor
if valorGrpo<255  then
   Grupo[3]=NuevoValor(ValorGrupo)
else
   Grupo[3]="000" 'pongo grupo 4 a cero
   ValorGrupo=cint(grupos[2]) 'convertir el grupo 3 a entero
   if ValorGrupo<255 then
      Grupo[2]=NuevoValor(ValorGrupo)
   else
      Grupos[2]="000" 'pongo grupo 3 a ceros
      ValorGrupo=cint(grupo[1]) paso a entero el grupo 2
      if ValorGrupo<255 then
         Grupo[1]=NuevoValor(ValorGrupo) 
      else
         Grupo[1]="000"
         ValorGrupo=cint(grupo[0]) 'convierto a entero el grupo 0
         if valorGrupo<255 then
           Grupo[0]=NuevoValor(ValorGrupo)
         else
            message.error("No es posible")
         endif
      endif
  endif
endif
textbox.text=Grupo[0] & "." & Grupo[1] & "." & grupo[2] & "." & Grupo[3]
end[/code]
Se puede hacer mucho mas pequeña en un bucle pero prefiero que entiendas el concepto y así se comprende mejor.

'Esta función recibe un valor, lo incrementa y lo convierte a string de tres dígitos
[code linenumbers=false syntax=gambas]private function NuevoValor(valor as integer) as string
dim s as string
inc valor 'incremento el valor
s=LlenarCeros(Valor) 'lo convierto a string y le añado ceros si hace falta
return s
end[/code]

Esta función recibe un valor, lo convierte a string y si tiene menos de tres dígitos le añade ceros por la izquierda para que tenga tres dígitos
[code linenumbers=false syntax=gambas]
private function LlenarCeros(Valor as integer) as string
dim S as string
S=cstr(valor) 'convertirlo a string
if len(S)=1 then
   S="00" & s 'si el valor solo tiene un dígito anteponerle dos dígitos
else
  if len(s)=2 then 
     S="0" & s 'si el valor tiene dos dígitos anteponerle un dígito
  endif
endif
return S
end[/code]

Pregunta lo que no entiendas
 :mryellow:


