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.
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)
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)
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.
left / right
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)
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)
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.
len
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
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.
InStr
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])
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)
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
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.
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])
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.
Split
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)
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"
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.
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
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.
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])
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
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.
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])
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
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
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.
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.
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.50