Si lo que quieres es modificar el último bloque de una dirección IP, no hay una función AutoIt para eso, ni una función de tratamiento de cadenas que te pueda servir, pues lo que quieres es modificar una cadena variable, en longitud y contenido...
Como decía jamaro, podría hacerse con ER's, pero no creo que sea necesario, con un poco de tratamiento de cadenas puedes hacerlo igual de bien, sin hacerlo demasiado complejo.
Veamos un poco de teoría para ver como resolver el problema:
Las direcciones IP, están formadas por cuatro bloques, y cada uno de ellos puede comprender entre 0 y 255 (esto es lo que realmente nos interesa).
Como lo que queremos es modificar el último bloque, los tres primeros nos dan igual, por lo que no es necesario analizarlos. Además, como sabemos que la dirección IP siempre tendrá cuatro bloques, pues no hay ni que contar los bloques que tiene, por lo que podemos centrarnos únicamente en el último bloque.
También sabemos, que los bloques de las direcciones IP se separan por puntos (.). Por lo qué, para saber como es el último bloque (longitud y valor) hemos de trabajar con el último punto (.) de la dirección IP, pero tenemos un problema: No sabemos la longitud del último bloque (1, 2 o 3 dígitos). Por lo que no sabemos donde está exactamente el último punto.
Es entonces, cuando hemos de empezar a aplicar tratamiento de cadenas con las funciones que nos proporciona AutoIt, que son más que suficientes.
En este caso, no nos interesa tanto el valor del último bloque de la dirección IP (que podría obtenerse fácilmente) si no, la cantidad de dígitos que contiene. para ello, hemos de contarlos extrayendo carácteres, ayudándonos de una condición múltiple, por ejemplo.
Sabiendo cuantos carácteres contiene el último bloque, sólo nos queda eliminarlos y poner en su lugar el valor por el que queramos modificarlos.
todo esto parece un poco complicado, pero con la función que te he hecho de ejemplo verás que no lo es tanto.
Puedes usarla tal cual está. Como verás, te sirve tanto para direcciones IP privadas o públicas. La función tiene dos o tres líneas de más, que hacen un control de errores, que si bien no es del todo necesario, no está de más ;).
La función está documentada, para que veas fácilmente lo que hace, si hay algo que no entiendes.
Código: Seleccionar todo
Global $LocalIP=@IpAddress1 ;IP local del equipo.
Func _IPAddressMod($ArgIP, $ArgValMod) ;Función "_IPAddressMod()".
#CS
----------
Descripción:
- Modifica el último bloque de la dirección IP recibida.
*No modifica la dirección IP del equipo.
Parámetro(s):
- $ArgIP: Dirección IP.
Puede ser pública o pribada.
- $ArgValMod: Valor por el que se desea modificar el último bloque de "$ArgIP".
Valor(es) de retorno:
- <>0="$ArgIP" con el último bloque modificado.
- 0=Ocurrió un error al modificar el último bloque de "$ArgIP".
Autor: Jonny.
----------
#CE
Local $Buff_ModIP ;Almacenar la dirección IP modificada.
If (($ArgIP=="") Or (($ArgValMod=="") Or (StringIsDigit($ArgValMod)=0) Or (Number($ArgValMod)<0 Or Number($ArgValMod)>255))) Then Return 0 ;Si "$ArgIP" o "$ArgValMod" no reciben un valor esperado - Devuelve código de error ("0").
Select ;Verifica los dígitos que contiene el último bloque de "$ArgIP".
Case StringRight(StringTrimRight($ArgIP, 1), 1)=="." ;Un dígito.
$Buff_ModIP=StringTrimRight($ArgIP, 1)&$ArgValMod ;Modifica el último bloque de "$ArgIP", por "$ArgValMod".
Return $Buff_ModIP ;Devuelve código de ejecución correcta ("$Buff_ModIP").
Case StringRight(StringTrimRight($ArgIP, 2), 1)=="." ;Dos dígitos.
$Buff_ModIP=StringTrimRight($ArgIP, 2)&$ArgValMod ;Modifica el último bloque de "$ArgIP", por "$ArgValMod".
Return $Buff_ModIP ;Devuelve código de ejecución correcta ("$Buff_ModIP").
Case StringRight(StringTrimRight($ArgIP, 3), 1)=="." ;Tres dígitos.
$Buff_ModIP=StringTrimRight($ArgIP, 3)&$ArgValMod ;Modifica el último bloque de "$ArgIP", por "$ArgValMod".
Return $Buff_ModIP ;Devuelve código de ejecución correcta ("$Buff_ModIP").
Case Else ;Más de tres dígitos.
Return 0 ;Devuelve código de error ("0").
EndSelect ;End -> Verifica los dígitos que contiene el último bloque de "$ArgIP".
EndFunc ;End -> Función "_IPAddressMod()".
Msgbox(0, "", _IpAddressMod($LocalIP, 0))
Exit
Espero te sirva.
Salu2!