Anuncios

Bienvenidos sean a este post, en el caso de hoy nos centraremos en ver algunas de las funciones disponibles para poder manipular nuestro texto para comenzar veremos a uno de los mas importantes como es mid.

Anuncios

mid

Nuestra primera funcion nos permite extraer cadenas de texto desde una cadena de texto, en general es utilizado para extraer un dato en particular y su sintaxis es:

mid('cadena',inicio,longitud)
Anuncios

En cadena podemos usar un valor literal o enviar una variable para ser analizada, inicio es el valor desde donde comenzara, si debe ser desde el principio se usa el valor 1, y longitud va a ser la cantidad de caracteres que va a extraer a partir desde el inicio antes informado, veamos el siguiente ejemplo:

msgbox mid("Entre amigos",7,6)
Anuncios

En este caso le diremos que inicie desde la 7a. posicion, siempre deben contar desde 1, y por ultimo la cantidad de caracteres que debe tomar, siempre debe ser el tamaño de caracteres, como en este caso, y para este caso particular nos devolvera la palabra “amigos”, veamos las siguientes dos funciones.

Anuncios

left / right

Anuncios

Estas dos funciones trabajan de forma similar a mid pero en lugar de indicarle un inicio, una extrae los n primeros caracteres de una cadena (left) y otra extrae los n ultimos caracteres de una cadena (right), su sintaxis es la siguiente:

left('cadena', valor)
right('cadena', valor)
Anuncios

En ambos casos son de forma muy parecida y en valor le diremos la cantidad de caracteres que debera extraer desde el inicio o el final respectivamente, tomemos el ejemplo anterior:

msgbox right("Entre amigos", 6)
Anuncios

Si lo probamos nos devolvera exactamente el mismo resultado que con mid pero en este caso no necesitamos de un inicio simplemente con la cantidad a extraer, veamos la siguiente funcion.

Anuncios

len

Anuncios

Es una funcion que en conjunto con mid seran de las mas utilizadas porque esta nos permite conocer la cantidad de caracteres en una cadena de texto pero en conjuncion con las otras nos daran muchas facilidades, veamos el siguiente ejemplo:

email.vbs

dim correo
dim caracter
dim texto

correo = inputbox("Ingresa una direccion de correo")

for a = 1 to len(correo)
	caracter = mid(correo, a, 1)
	if caracter = chr(64) then
		texto = correo & " es valido"
		exit for
	end if
	i = i + 1
next

if i = len(correo) then texto = correo & " no es valido"

wscript.echo texto
Anuncios

En este caso aplicaremos varias cosas, primero usaremos un inputbox donde le pediremos que ingrese el email, nuestro siguiente paso sera verificar por medio de un bucle for que comenzara desde 1 hasta el valor obtenido por len de la variable correo, nuestro siguiente paso en el bucle sera obtener caracter por caracter por medio de mid, donde le pasaremos a correo pero variaremos al valor de inicio por medio de a (el valor del bucle) y le pasaremos una longitud de 1, nuestro siguiente sera un condicional donde verificara si caracter coincide con el caracter 64 de la tabla ASCII, adivinen cual es: adivinaron la arroba (@), si se cumple a texto le agregamos el correo y el mensaje de que es valido y salimos del bucle for, sino se cumple la condicion a medida que pasemos los ciclos iremos incrementando en 1 el valor de i, este ultimo paso sera crucial para el siguiente condicional donde verificaremos si i es igual al valor que nos devuelve len de correo, si es verdadero (deberia serlo por fuerza) agregara a texto el correo e indicando que no es valido, si lo probamos funcionara de la siguiente manera

En este caso funciono correctamente dandonos la posibilidad de una verificacion bastante simple y eficaz de si se ingreso correctamente un dato fundamental hoy en dia como es el correo electronico, hay una mejor opcion.

Anuncios

InStr

Anuncios

Esta funcion tiene la particularidad de permitirnos buscar una cadena dentro de otra cadena y devolviendo la posicion de la primer coincidencia de la cadena que buscamos, su sintaxis es la siguiente:

InStr([inicio,]cadena_origen, cadena_que_se_busca[, comparacion])
Anuncios

En este caso tenemos dos datos opcionales como son inicio y comparacion dado que sino informamos una posicion de inicio comenzara desde el principio de la cadena de origen, de manera predeterminada esta funcion distingue entre mayusculas y minusculas, por ejemplo veamos el siguiente comando:

instr("Ejemplo de VBScript", "vbs")

En este caso nos devolveria el valor 0 porque no hubo coincidencias ya que “vbs” no existe en la cadena de origen, en cambio si lo ejecutamos de la siguiente manera:

instr(1,"Ejemplo de VBScript", "vbs", 1)
Anuncios

En este caso nos devolvera el valor 12 porque ahora ignorara si son mayusculas o minusculas, como dato adicional si usan el de comparacion deben informar si o si el de inicio, tomemos el ejemplo del correo y hagamos la siguiente modificacion:

dim correo
dim caracter
dim texto

correo = inputbox("Ingresa una direccion de correo")

pos = instr(correo, chr(64))

if pos = 0 then
	texto = correo & " no es valido"
else
	texto = correo & " es valido"
end if

wscript.echo texto
Anuncios

En este caso le decimos que nos devuelva en que posicion se encuentra la arroba (@) dentro de correo y lo almacenamos en pos, si es igual a 0 sabemos que no esta y por ende no es valido, si tiene cualquier valor distinto de 0 nos informa que esta en alguna parte de correo dando como conclusion de que es valido, de esta forma asigna los respectivos mensajes, si lo probamos trabaja de la misma forma que antes pero mas conciso, mas compacto y mas practico.

Anuncios

Tambien existe la funcion InStrRev la cual trabaja de forma parecida pero con sutiles diferencias, veamos su sintaxis:

InStrRev(cadena_origen, cadena_que_se_busca[,inicio, comparacion]) 
Anuncios

En este caso hace la busqueda al reves es decir que comienza desde el final del archivo hasta el comienzo, si nosotros no especificamos ningun valor este por defecto sera -1, y cambia sutilmente el orden, en lugar de tener a inicio al comienzo lo tiene despues de la cadena de busqueda pero trabaja de forma similar.

Anuncios

Split

Anuncios

Esta es sin duda una de las herramientas mas utilizadas en este lenguaje y en otros de tipo script ya que nos da la posibilidad de poder separar (split) una cadena a traves de un caracter especifico transformando a esa cadena en un array, su sintaxis es la siguiente:

variable = split(cadena, caracter)
Anuncios

Donde variable es donde almacenaremos todo, cadena es la variable o literal que dividiremos y caracter es el que usaremos para separar, para que se entienda vamos a retomar el ejemplo que vimos con arrays y lo modificaremos de la siguiente manera:

dim arreglo(1,5)
dim texto
dim lista
dim total

lista = "Martin Miranda Marta Gargaglione Enzo Tortore Javier Marcuzzi Ariel Polizzi Raul Picos"

l = split(lista, chr(32))
b = 0
c = 0

for a = 0 to ubound(l)
	if b > 1 then 
		b = 0
		c = c + 1
	end if
	arreglo(b,c) = l(a)
	b = b + 1
next	

for a = 0 to 5
	apellido = arreglo(1,a)
	nombre = arreglo(0,a)
	texto = texto & apellido &  ", " & nombre & "  " & chr(10)
next

msgbox texto,,"Devolucion del Array"
Anuncios

En este caso vamos a tener una variable con todos los nombres y apellidos de las personas llamada lista, a esta la dividiremos con split usando el espacio, en este caso el caracter 32, y lo almacenaremos en l, despues iniciaremos dos variables llamadas b y c con el valor 0, nuestro siguiente paso sera recuperar la informacion de l, para ello usaremos un bucle for donde contaremos desde 0 hasta la ultima posicion de l, esto por medio de ubound, chequeamos si b es mayor que 1 reseteamos a b con el valor de 0 e incrementamos en 1 a c, esto equivaldria a los valores de fila y columna que usabamos antes, donde columna estaba entre 0 y 1 (ahora es b) y fila entre 0 y 5 (ahora es c) despues del condicional enviamos los valores correspondientes para las coordenadas y como valor a este array el valor almacenado en l en la posicion informada por a (el bucle for), despues incrementamos a b, una vez que terminamos lo que tenemos es la misma lista de variables que teniamos antes pero en lugar de hacerlo literal lo hicimos con un bucle for, despues usamos el bucle del ejemplo anterior para recuperar la informacion, asignarla a texto y mostrarla en pantalla, tal como antes

Si bien lista es un literal tranquilamente se puede reemplazar con la devolucion de una planilla, una base de datos, datos ingresados manualmente, en fin muchas para reemplazar esa lista y nuestro codigo se encargara del resto.

Anuncios

Join

Esta funcion es la opuesta de la anterior porque en lugar de separar esta une lo que separo split y en lugar de usar un caracter para separar tiene uno para unir, veamos la sintaxis:

variable = join(variable, caracter)

Por ejemplo vamos a tomar el siguiente codigo como ejemplo:

join.vbs

texto = "Texto de prueba para usar Join"

a = split(texto, chr(32))

texto = join(a, "_")

wscript.echo texto
Anuncios

En este caso primero tendremos un texto de prueba, puede ser cualquier otro pero recuerden separarlos solo con espacios, luego aplicamos un split, al igual que anteriormente uso el espacio en blanco y lo almacenamos en a, la siguiente linea toma a texto y por medio de join le pasamos la variable a y que lo vuelva a unir pero con el guion bajo, finalmente lo mostramos en pantalla

Es decir que esta funcion lo unico que hace es recomponer lo que se hizo antes pero con la posibilidad de unirlo con algun caracter especial, pasemos a la siguiente funcion.

Anuncios

Replace

Esta funcion como su nombre lo indica nos permite reemplazar una cadena X por otra, veamos su sintaxis:

replace(texto, cadena_a_buscar, cadena_reemplazo, inicio, numero_max_sustit[, comparacion]) 
Anuncios

En este caso parece dificil pero no lo es tanto, ya que tenemos el texto completo, la primera cadena sera la que debemos buscar, la segunda cadena sera la que reemplace a la que buscamos, inicio es desde donde comenzara y el numero maximo de veces que podemos sustituirla, por ultimo comparacion que trabaja igual que instr, veamos un ejemplo simple:

replace.vbs

texto = "Este es un simple texto de prueba para verificar a replace"

a = replace(texto, "e", "*", 1, 9, 1)

wscript.echo a
Anuncios

En este caso tenemos un texto, puede ser cualquier otro, usaremos una variable llamada a para guardar el “reemplazo”, en este caso pasamos la variable texto, le informamos que cambie las letras e por asteriscos (*), le decimos que comience desde la primera posicion, le informamos que solo cambie a nueve caracteres y por ultimo que no tenga en cuenta las mayusculas/minusculas, veamos el resultado

En este caso observen como cambio las letras e, especialmente la primera, conto hasta 9 y como llego a su limite no reemplazo la ultima letra e de replace, si bien nosotros lo usamos para un caracter esto tambien funciona con palabras o textos mas largos, pasemos a la ultima funcion.

Anuncios

Filter

Esta es la ultima de las funciones que veremos en este post donde la usaremos para filtrar informacion de un texto, su sintaxis es:

filter(array, filtro[, incluir, comparacion])
Anuncios

En este caso no trabajamos con una variable con texto sino con un array de cadena, que va a ser nuestra primer variable, luego debemos ingresar el filtro, que puede ser un caracter o una cadena, incluir al igual que comparacion son opcionales, incluir es un valor booleano (true o false) que incluye o excluye a los elementos que coinciden con el filtro, comparacion trabaja igual que en los otros casos, veamos un ejemplo simple:

filter.vbs

lista = "tinchicus@gmail.com, a.b.com, marta@yahoo.com, mrbogusa@gmail.com, c.gmail.com, mirandma.ar.ibm.com"

l = split(lista, ", ")

valido = filter(l, "@")
novalido = filter(l, "@", false)

for a = 0 to ubound(valido)
	vale = vale & valido(a) & ", "
next

for a = 0 to ubound(valido)
	novale = novale & novalido(a) & ", "
next

texto = "Validos: " & vale & vbCrLf
texto = texto & "No validos: " & novale

wscript.echo texto
Anuncios

En este caso primero tenemos un listado de correos separados por una coma con un espacio, lo primero que hacemos es usar un split con la coma y el espacio como separador, esto nos creara direcciones individuales dentro de l, nuestro siguiente paso sera usar un filter para buscar primero las direcciones con arroba (@) y guardarlas en las validas, la otra linea hace exactamente lo mismo pero como agregamos el false en lugar de incluirlas las excluye dando como resultado que esten las direcciones sin arroba, despues usaremos dos bucles for para mirar tanto dentro de valido como de novalido (en sus respectivos bucles) y los almacenaremos en dos variables una llamada vale (para las direcciones validas) y otra llamada novale (para las no validas) una vez terminados las ingresamos en texto y las mostramos en pantalla

En este caso vemos que funciono perfecto pero si observan bien las lineas nos quedaron con una coma al final, para eliminar esto haremos una ultima modificacion en el codigo anterior:

lista = "tinchicus@gmail.com, a.b.com, marta@yahoo.com, mrbogusa@gmail.com, c.gmail.com, mirandma.ar.ibm.com"

l = split(lista, ", ")

valido = filter(l, "@")
novalido = filter(l, "@", false)

for a = 0 to ubound(valido)
	vale = vale & valido(a) & ", "
next

for a = 0 to ubound(valido)
	novale = novale & novalido(a) & ", "
next

vale = mid(vale, 1, len(vale)-2)
novale = mid(novale, 1, len(novale)-2)


texto = "Validos: " & vale & vbCrLf
texto = texto & "No validos: " & novale

wscript.echo texto
Anuncios

En este caso tomamos a vale y novale, le aplicamos un mid, con su respectiva variable, le decimos el inicio que sea 1, y la longitud queda determinada por el len de la variable que corresponda y a ese valor le restamos 2, para eliminar la coma y el espacio, si lo volvemos a ejecutar a ejecutar se vera asi

Como pueden ver queda de una forma mas presentable con muy poca modificacion y no importa la cantidad siempre se va a modificar, estos son los detalles que nos permiten corregir estas funciones.

Nota: Cabe aclarar que la mayoria (o casi todas) de estas funciones son de la version 2 en adelante y algunas de la version 3 en adelante, igualmente no se preocupen porque la version VBScript en la mayoria de los windows es muy elevada.
Anuncios

En resumen, hoy hemos visto las funciones mas importantes para manipular cadenas de texto, en general van a usar la mayoria, algunas mas que otras, hemos visto algunos ejemplos practicos, como aplicarlos en la vida real, como nos permiten optimizar un codigo, algunas detalles que podemos automatizar, sin tener que reinventar la polvora, en fin un post largo y un poco tedioso pero muy util, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.

Anuncios

Tengo un Patreon donde podes acceder de manera exclusiva a material para este blog antes de ser publicado, sigue los pasos del link para saber como.

Tambien podes comprar mi libro sobre VBscript en Amazon

Tambien podes donar

Es para mantenimiento del sitio, gracias!

$1.00