Ayuda modificar cadena de texto
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Ayuda modificar cadena de texto
Hola amigos
Necesito de vuestra ayuda, como puedo modificar un texto, por ejemplo
$texto = "192.168.1.35"
y dejarlo en
$texto = "192.168.1."
es decir borrar los caracteres que haya a la derecha de la cadena hasta que encuentre el primer punto "."
He estado mirando la ayuda y he encontrado como añadir, sustituir o buscar en una cadena, peor no he visto nada sobre como eliminar de esta manera. En el foro también he buscado y no encuentro nada al respecto o no he sabido verlo, estoy un poco espeso.
Espero vuestra ayuda, mil gracias!!!
Necesito de vuestra ayuda, como puedo modificar un texto, por ejemplo
$texto = "192.168.1.35"
y dejarlo en
$texto = "192.168.1."
es decir borrar los caracteres que haya a la derecha de la cadena hasta que encuentre el primer punto "."
He estado mirando la ayuda y he encontrado como añadir, sustituir o buscar en una cadena, peor no he visto nada sobre como eliminar de esta manera. En el foro también he buscado y no encuentro nada al respecto o no he sabido verlo, estoy un poco espeso.
Espero vuestra ayuda, mil gracias!!!
La vida es larga y dura.
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Re: Ayuda modificar cadena de texto
Bueno he encontrado una solución un poco chapucera a lo que necesito dando vuelta y más vueltas a las funciones de cadenas de texto de la ayuda, que es eliminar el último bloque de una dirección ip de la siguiente manera:
Con esto ya me funciona lo que quiero conseguir, pero agradecería una manera más elegante de conseguir este resultado.
Gracias amigos.
Código: Seleccionar todo
$ip = StringSplit("192.168.1.33",".")
$ip_rango = $ip[1] & "." & $ip[2] & "." & $ip[3] & "."
MsgBox(0,"",$ip_rango)
Gracias amigos.
La vida es larga y dura.
Re: Ayuda modificar cadena de texto
Yo probaria con expresiones regulares. seleccionando los tres primeros grupos.
No tengo Autoit ahora pero si no encuentras la solución lo miro mañana.
Saludos
No tengo Autoit ahora pero si no encuentras la solución lo miro mañana.
Saludos
Re: Ayuda modificar cadena de texto
He probado, y en principio, con la expresión regular (.*\.) obtendrías lo que buscas (al menos en el ejemplo anterior).
La expresión es:
. Cualquier carácter
* repetido 0 o más veces
\. El carácter punto como tal
Con lo cual muestra todo lo que encuentra hasta el último punto (incluido)
Si no necesitas el punto final, sería: (.*)\.
Saludos
La expresión es:
. Cualquier carácter
* repetido 0 o más veces
\. El carácter punto como tal
Con lo cual muestra todo lo que encuentra hasta el último punto (incluido)
Si no necesitas el punto final, sería: (.*)\.
Código: Seleccionar todo
$ip = "192.168.1.33"
$ip_mod=StringRegExp($ip,"(.*\.)",1)
MsgBox(0,"",$ip_mod[0])
- chekok
- Hacker del Foro
- Mensajes: 111
- Registrado: 16 Sep 2011, 11:50
- Ubicación: Valencia / España
- Contactar:
Re: Ayuda modificar cadena de texto
El tema es que estoy haciendo una pequeña gui que muestra las direcciones ip activas en una red local leyendo automáticamente la dirección ip del equipo desde el que se ejecuta. Para saber cuantos equipos hay conectados y poder banear aquellas direcciones que no deberian estar en la red (por lo de las intrusiones wifi más que nada) o saber con que ips puedes mantener comuncación para enviar mensajes o ficheros por socket (esto ya sería un segundo apartado del programa para más adelante). Espero acabarlo pronto y pasaros el code.
Lo que hago es leer la ip del equipo en cuestión, por ejemplo: 192.168.1.25 y con esa dirección hago un ping en todas las direcciones posibles dentro de esa red, es decir desde la 192.168.1.0 hasta la 192.168.1.255, de ahí que necesite eliminar solo el último bloque de la dirección leída del equipo.
Al ser una IP, el código que estoy usando ahora funciona bien, pero como hasta ahora no he tocado el manejo de cadenas en autoit no se si es la más adecuada o políticamente correcta la forma que estoy usando.
Gracias jamaro por la ayuda.
Lo que hago es leer la ip del equipo en cuestión, por ejemplo: 192.168.1.25 y con esa dirección hago un ping en todas las direcciones posibles dentro de esa red, es decir desde la 192.168.1.0 hasta la 192.168.1.255, de ahí que necesite eliminar solo el último bloque de la dirección leída del equipo.
Al ser una IP, el código que estoy usando ahora funciona bien, pero como hasta ahora no he tocado el manejo de cadenas en autoit no se si es la más adecuada o políticamente correcta la forma que estoy usando.
Gracias jamaro por la ayuda.
La vida es larga y dura.
Re: Ayuda modificar cadena de texto
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.
Espero te sirva.
Salu2!
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
Salu2!
- BasicOs
- Site Admin
- Mensajes: 2091
- Registrado: 21 Nov 2006, 19:24
- Ubicación: El Internet - (Canarias, España)
- Contactar:
Re: Ayuda modificar cadena de texto
Los textos y sus variables son información, datos, info.. palabras, etc... que se pueden reutilizar...
Una alternativa sería con
buscar desde la izquierda un número donde está el primer punto y coger la parte izquierda del string hasta el punto
$result =StrinLeft($laip, StringInStr($laip,".",0,-1))
o igual bien donde se encuentra la tercera ocurrencia del punto
$result =StrinLeft($laip, StringInStr($laip,".",0,3)-1)
Salu22:)
La función TextodentroDeTexto:
http://www.autoitscript.com/autoit3/doc ... gInStr.htm
Una alternativa sería con
buscar desde la izquierda un número donde está el primer punto y coger la parte izquierda del string hasta el punto
$result =StrinLeft($laip, StringInStr($laip,".",0,-1))
o igual bien donde se encuentra la tercera ocurrencia del punto
$result =StrinLeft($laip, StringInStr($laip,".",0,3)-1)
Salu22:)
La función TextodentroDeTexto:
http://www.autoitscript.com/autoit3/doc ... gInStr.htm
Re: Ayuda modificar cadena de texto
Sí, pero quería modificar el último bloque, no el primero :).
Ahora que dices lo de la "ocurrencia del punto", me he acordado de la función StringInSTR(), con la que podrías buscar el último punto de la cadena. Con eso y alguna función más, podría remplazarse en una sóla línea, sí. Aunque como yo lo he hecho parece que lía menos, no hay tantas funciones anidadas ;). Además, yo lo he hecho más como función genérica...
Salu2!
Ahora que dices lo de la "ocurrencia del punto", me he acordado de la función StringInSTR(), con la que podrías buscar el último punto de la cadena. Con eso y alguna función más, podría remplazarse en una sóla línea, sí. Aunque como yo lo he hecho parece que lía menos, no hay tantas funciones anidadas ;). Además, yo lo he hecho más como función genérica...
Salu2!
- BasicOs
- Site Admin
- Mensajes: 2091
- Registrado: 21 Nov 2006, 19:24
- Ubicación: El Internet - (Canarias, España)
- Contactar:
Re: Ayuda modificar cadena de texto
Jonny
La funcion localiza el ultimo punto y luego elimina lo q esta después del punto
Pruébalo
$result =StrinLeft($laip, StringInStr($laip,".",0,-1))
Puedes usar un -1 o bien un 3 como quieras
Salu:)
La funcion localiza el ultimo punto y luego elimina lo q esta después del punto
Pruébalo
$result =StrinLeft($laip, StringInStr($laip,".",0,-1))
Puedes usar un -1 o bien un 3 como quieras
Salu:)