3. Los fundamentos de la programación VBSCRIPT
Una vez descritos los posibles contextos de ejecución de un vbscript script, pasamos a hablar del lenguaje en sí. En lo que sigue, asumimos las siguientes condiciones:
- el contenedor script es WSH
- el script se coloca en un archivo con sufijo .vbs
Para presentar un concepto, en general operamos del siguiente modo:
- introducir el concepto si es necesario
- se presenta un programa ilustrativo y sus resultados
- comentar los resultados y el programa si es necesario
Los contenedores vbscript no distinguen entre mayúsculas y minúsculas en el texto script. Por lo tanto, es posible escribir wscript.echo "peekaboo o WSCRIPT.ECHO "peekaboo.
Los programas presentados en la siguiente sección hacen mucha escritura en la pantalla, así que vamos a reintroducir los métodos para escribir el objeto wscript.
3.1. Mostrar información
Ya hemos utilizado el echo el objeto wscript pero este último dispone de otros métodos para escribir en la pantalla, como muestra el siguiente script :
Programa | Resultados |
![]() |
Hay que tener en cuenta los siguientes puntos:
- Cualquier texto colocado después de un apóstrofo es considerado como un comentario por script y no es interpretado por WSH ( línea 1).
- el método echo escribe sus argumentos y pasa a la línea siguiente, al igual que el método writeLine (líneas 2 y 6)
- el método write escribe sus argumentos y no pasa a la línea siguiente (línea 3)
- una marca de fin de línea está representada por la secuencia de dos caracteres con códigos ASCII 13 y 10. Por ejemplo, la línea 4 está representada por la expresión chr(13) & chr(10) donde chr(i) es el carácter de código ASCII i y & es el operador de concatenación de cadenas. Así, "chat" & "eau" es la cadena "chateau".
- la marca de fin de línea puede representarse más fácilmente mediante la constante vbCRLF (línea 5)
3.2. Eescribir instrucciones en un script Vbscript
Por defecto, se escribe una instrucción por línea. Sin embargo, puede escribir varias instrucciones por línea, separándolos con el carácter :, como en inst1:inst2:inst3. Si una línea es demasiado larga, puede cortarse en trozos. A continuación, las distintas partes de la instrucción deben terminarse con los dos caracteres (espacio)_. Tomemos el ejemplo anterior y reescribamos las instrucciones de otra manera:
Programa | Resultados |
![]() |
3.3. Escribir con la función msgBox
Aunque utilizamos el wscript para escribir en la pantalla, esta vez existe una función más sofisticada para mostrar información en una ventana. Se trata de la función msgbox que se utiliza generalmente con tres parámetros:
msgbox mensaje, iconos+botones, título
- message es el texto del mensaje a mostrar
- iconos+botones (opcional) es, de hecho, un número que indica el tipo de icono y de botones que se colocarán en la ventana de mensajes. Este número suele ser la suma de dos números: el primero determina el icono, el segundo los botones
- title es el texto que se colocará en la barra de título de la ventana de mensajes
Los valores que deben utilizarse para especificar el icono y los botones de la ventana de visualización son los siguientes:
Constante | Valor | Descripción |
vbOKOnly | 0 | Muestra sólo el OK. |
vbOKCancel | 1 | Muestra los botones OK y Cancelar. |
vbAbortRetryIgnore | 2 | Muestra los botones Abandone, Inténtalo de nuevo y Ignore. |
vbYesNoCancel | 3 | Muestra los botones Sí, No y Cancelar. |
vbYesNo | 4 | Muestra los botones Sí y No. |
vbRetryCancel | 5 | Muestra los botones Inténtalo de nuevo y Cancelar. |
vbCritical | 16 | Muestra el icono de mensaje crítico. |
vbQuestion | 32 | Muestra el icono de solicitud de advertencia. |
vbExclamation | 48 | Muestra el icono de mensaje de advertencia. |
vbInformation | 64 | Muestra el icono de mensaje de información. |
vbDefaultButton1 | 0 | El primer botón es el botón por defecto. |
vbDefaultButton2 | 256 | El segundo botón es el botón por defecto. |
vbDefaultButton3 | 512 | El tercer botón es el botón por defecto. |
vbDefaultButton4 | 768 | El cuarto botón es el botón por defecto. |
vbApplicationModal | 0 | Aplicación modal; el usuario debe responder al mensaje antes de continuar trabajando en la aplicación actual. |
vbSystemModal | 4096 | Sistema modal; todas las aplicaciones se suspenden hasta que el usuario responde al mensaje. |
He aquí algunos ejemplos:
Programa | ||||||||||||
![]() | ||||||||||||
Resultados | ||||||||||||
| ||||||||||||
En algunos casos, presentamos una ventana de información que es también una ventana de entrada. Si hacemos una pregunta, por ejemplo, queremos saber si el usuario ha hecho clic en el botón sí o en el no. La función msgBox devuelve un resultado que no hemos utilizado en el programa anterior. Este resultado es un número entero que representa el botón utilizado por el usuario para cerrar la ventana de visualización:
Constante | Valor | Botón seleccionado |
vbOK | 1 | OK |
vbCancel | 2 | Cancelar |
vbAbort | 3 | Abandone |
vbRetry | 4 | Inténtalo de nuevo |
vbIgnore | 5 | Ignore |
vbYes | 6 | Sí |
vbNo | 7 | No |
El siguiente programa muestra cómo utilizar el resultado de la función msgBox. Se muestra 4 veces una ventana con los botones sí, no y cancelar. La respuesta es la siguiente:
- haga clic en sí
- haga clic en no
- haga clic en cancelar
- cerrar la ventana sin utilizar un botón. El programa muestra que es lo mismo que utilizar el botón Cancelar.
Programa | ||||
![]() | ||||
Resultados | ||||
|
3.4. Les datos utilizables en Vbscript
VBscript sólo conoce un tipo de datos: los variante. El valor de una variante puede ser un número (4, 10.2), una cadena de caracteres ("hola"), un booleano (true/false), una fecha (#01/01/2002#), la dirección de un objeto, o un conjunto de todos estos datos colocados en una estructura llamada array.
Veamos el siguiente programa y sus resultados:
Programa | Resultados |
![]() |
Comentarios :
- varios lenguajes de programación (C, C++, Pascal, Java, C#, etc.) exigen declarar una variable antes de poder utilizarla. Esta declaración consiste en indicar el nombre de la variable y el tipo de datos que puede contener (entero, real, cadena, fecha, booleano, etc.). La declaración de variables permite hacer varias cosas:
- conocer el espacio de memoria necesario para la variable si diferentes tipos de datos requieren diferentes espacios de memoria
- comprobar la coherencia del programa. Así, si i es un número entero y c una cadena de caracteres, multiplicar i por c no tiene sentido. Si el tipo de variables i y c ha sido declarada por el programador, el programa encargado de analizar el programa antes de su ejecución puede informar de dicha incoherencia.
Como la mayoría de lenguajes script con un único tipo de datos (Perl, Python, Javascript, etc.), Vbscript permite no declarar variables. Esto es lo que se ha hecho en el ejemplo anterior.
- observe la sintaxis de los diferentes datos
- 10.2 en la línea 10 (punto decimal, no coma). Observe que aparece 10,2.
- 1.4e-2 en la línea 13 (notación científica). En pantalla aparecía el número 0,014
- [#01/10/2002#] (línea 26) para representar la fecha 10 de enero de 2002. Por lo tanto, vbscript utiliza el formato #mm/dd/aaaa# para representar la fecha jj del mes mm del año aaaa
- los booleanos true y false (verdadero/falso) en las líneas 31 y 34. Estos dos valores están representados por los enteros -1 y 0 respectivamente, como se muestra en las líneas 32 y 35. Cuando se concatena un booleano con una cadena de caracteres, estos valores se convierten en las cadenas "Verdadero" y "Falso" respectivamente, como se muestra en las líneas 33 y 36. Observe de paso que el operador de concatenación & puede utilizarse para concatenar algo distinto de cadenas.
- como una variable v no tiene tipo asignado, puede albergar valores de distintos tipos sucesivamente a lo largo del tiempo.
3.5. Los subtipos del tipo variante
Esto es lo que dice la documentación oficial sobre los distintos tipos de datos que puede contener una variante:
Más allá de la simple distinción entre número y cadena, un Variante puede distinguir entre distintos tipos de información digital. Por ejemplo, algunas informaciones digitales representan una fecha o una hora. Cuando esta información se utiliza con otros datos de fecha u hora, el resultado siempre se expresa como fecha u hora. También existen otros tipos de información numérica, desde valores booleanos hasta grandes números en coma flotante. Estas diferentes categorías de información que puede contener un Variante son subtipos. En la mayoría de los casos, basta con colocar los datos en un subtipo Variante y se comporta de la manera más adecuada en función de estos datos.
La siguiente tabla muestra los diferentes subtipos que puede contener un Variante.
Subtipo | Descripción |
Empty | Le Variante no se inicializa. Su valor es cero para las variables numéricas y una cadena de longitud cero ("") para las variables de cadena. |
Null | Le Variante contiene intencionadamente datos incorrectos. |
Boolean | |
Byte | Contiene un número entero de 0 a 255. |
Integer | Contiene un número entero de -32 768 a 32 767. |
Currency | -922 337 203 685 477,5808 à 922 337 203 685 477,5807. |
Long | Contiene un número entero comprendido entre -2 147 483 648 y 2 147 483 647. |
Single | Contiene un número en coma flotante con precisión simple de -3,402823E38 a -1,401298E-45 para valores negativos; de 1,401298E-45 a 3,402823E38 para valores positivos valores positivos. |
Double | Contiene un número en coma flotante de doble precisión de -1,79769313486232E308 a -4,94065645841247E-324 para valores negativos; de 4,94065645841247E-324 a 1,79769313486232E308 para valores positivos. |
Date (Time) | Contiene un número que representa una fecha comprendida entre el 1 de enero de 100 y el 31 de diciembre de 9999. |
String | Contiene una cadena de longitud variable limitada a unos 2.000 millones de caracteres. |
Object | Contiene un objeto. |
Error | Contiene un número de error. |
3.6. Cómo saber el tipo exacto de datos contenidos en una variante
Una variable de tipo variant puede contener datos de varios tipos. A veces necesitamos conocer la naturaleza exacta de estos datos. Si escribimos producto=número1*número2suponemos que número1 y número2 son dos valores numéricos. A veces no podemos estar seguros, porque los valores pueden proceder de una entrada de teclado, de un fichero o de alguna otra fuente externa. Entonces tenemos que comprobar la naturaleza de los datos introducidos en número1 y número2. La función typename(var) nos permite averiguar el tipo de datos que contiene la variable var. He aquí algunos ejemplos:
Programa | Resultados |
![]() |
Otra función posible es vartype(var) que devuelve un número que representa el tipo de datos contenidos en la variable var :
Constante | Valor | Descripción |
vbEmpty | 0 | Vacío (no inicializado) |
vbNull | 1 | Null (sin datos válidos) |
vbInteger | 2 | Integral |
vbLong | 3 | Entero largo |
vbSingle | 4 | Número de coma flotante de precisión simple |
vbDouble | 5 | Número de coma flotante de doble precisión |
vbCurrency | 6 | Monetario |
vbDate | 7 | Fecha |
vbString | 8 | Canal |
vbObject | 9 | Objeto de automatización |
vbError | 10 | Error |
vbBoolean | 11 | Booleano |
vbVariant | 12 | Variante (sólo se utiliza con las tablas Variante) |
vbDataObject | 13 | Objeto no automatizado |
vbByte | 17 | Byte |
vbArray | 8192 | Cuadro |
Nota Estas constantes se especifican mediante VBScript. Como resultado, los nombres se pueden utilizar en cualquier parte del código en lugar de los valores reales.
La información anterior procede de la documentación de VBscript. La documentación es a veces incorrecta, probablemente como resultado de copiar y pegar de la documentación VB. La función vartype de VBScript es sólo una parte de lo anunciado anteriormente.
El programa anterior, reescrito para vartype da los siguientes resultados:
Programa | Resultados |
![]() |
3.7. Declarar las variables utilizadas por el script
Hemos indicado que no es obligatorio declarar las variables utilizadas por el script. En este caso, si escribimos :
con un error tipográfico smme en lugar de sum en la instrucción 2, vbscript no informará de ningún error. Asumirá que smme es una nueva variable. La creará y, en el contexto de la instrucción 2, la utilizará inicializándola a 0.
Este tipo de error puede ser muy difícil de encontrar. Por lo tanto, es aconsejable forzar la declaración de variables mediante el método opción explícita al principio de script. A continuación, cualquier variable debe declararse con un sol antes de utilizarlo por primera vez:
En este ejemplo, vbscript indicará que hay una variable no declarada smme en 2), como muestra el siguiente ejemplo:
Programa | Resultados |
![]() |
Aunque las variables no se declaran en la mayoría de los ejemplos breves de este documento, obligaremos a declararlas en cuanto escribamos los primeros scripts significativos. El sitio Opción explícita se utilizará sistemáticamente.
3.8. Les funciones de conversión
Vbscript transforma los datos de la variante en cadenas, números, booleanos, etc. dependiendo del contexto. La mayoría de las veces, esto funciona bien, pero a veces puede dar lugar a algunas sorpresas, como veremos más adelante. En este caso, es posible que desee "forzar" el tipo de datos de la variante. VBscript tiene funciones de conversión que transforman una expresión en varios tipos de datos. He aquí algunas de ellas:
Cint (expresión) | transforma la expresión en un entero corto (integer) |
Clng (expresión) | transformar expresión en entero long (largo) |
Cdbl (expresión) | transforma la expresión en doble real (double) |
Csng (expresión) | transforma la expresión en un único real |
Ccur (expresión) | transforma la expresión en moneda |
He aquí algunos ejemplos:
3.9. Leer datos introducidos mediante el teclado
El objeto wscript permite a un script recuperar los datos tecleados en el teclado. El método wscript.stdin.readLine se utiliza para leer una línea de texto escrita en el teclado y confirmada pulsando la tecla "Intro". Esta línea puede asignarse a una variable.
Programa | Resultados |
![]() |
Comentarios :
- En la columna de resultados y en la fila [Escriba su nombre : st] , st es la línea tecleada por el usuario.
Aunque el texto escrito en el teclado represente un número, sigue considerándose ante todo una cadena de caracteres, como se muestra en el ejemplo siguiente:
Programa | Resultados |
![]() |
Si este número se utiliza en una operación aritmética, VBscript convertirá automáticamente la cadena en un número, pero no siempre. Veamos el siguiente ejemplo:
Programa | Resultados |
![]() |
En los resultados, podemos ver que la línea 8 de script no se ejecutó como se esperaba, porque (desafortunadamente) en vbscript el operador + tiene dos significados: suma de dos números o concatenación de dos cadenas (las dos cadenas se pegan juntas). Anteriormente vimos que los números escritos en el teclado se leían como cadenas y que vbscript los transformaba en números según fuera necesario. Lo ha hecho correctamente para las operaciones -,*,/, que sólo pueden utilizar números, pero no para el operador +, que también puede utilizar cadenas. Aquí ha supuesto que queríamos concatenar cadenas.
Una solución sencilla a este problema es transformar las cadenas en números en cuanto se leen, como muestra la siguiente mejora del programa anterior:
Programa | Resultados |
![]() |
3.10. Sa introducción de datos con la función inputbox
Es posible que desee introducir datos en una interfaz gráfica en lugar de utilizar el teclado. En este caso, utilice la función inputBox. Hay muchos parámetros, pero sólo los dos primeros se utilizan con frecuencia:
reply=inputBox(mensaje,título)
- mensaje la pregunta que se hace al usuario
- título (opcional): el título que se da a la ventana de entrada
- responder el texto escrito por el usuario. Si el usuario ha cerrado la ventana sin responder, responder es la cadena vacía.
He aquí un ejemplo en el que pedimos el nombre y la edad de una persona. Para el nombre, damos alguna información y pulsamos OK. Para la edad, también damos información pero pulsamos Cancelar.
Programa | ||||
![]() | ||||
Resultados | ||||
|
3.11. Utilizar objetos estructurados
Es posible crear objetos con métodos y propiedades utilizando vbscript. Para mantener las cosas simples, vamos a presentar aquí un objeto con propiedades y sin métodos. Consideremos una persona. Tiene muchas propiedades que la caracterizan: altura, peso, color de piel, ojos, pelo, etc. Nos centraremos sólo en dos: su nombre y su edad. Antes de poder utilizar objetos, hay que crear el molde que se utilizará para fabricarlos. Esto se hace en vbscript con un clase. La clase persona podría definirse del siguiente modo:
Esta es la instrucción [Dim nombre,edad] que define las dos propiedades del persona. Para crear copias (instancias) del personaescribimos :
¿Por qué no escribir
Porque una variante no puede contener un objeto. Sólo puede contener su dirección. Al escribir set persona1=nueva personase produce la siguiente secuencia de acontecimientos:
- un objeto persona se crea. Esto significa que se le asigna memoria.
- la dirección de este objeto persona se asigna a la variable persona1
Tenemos entonces el siguiente esquema de memoria para las variables persona1 y persona2 :
![]() |
Dicho de otro modo, podríamos decir que persona1 es un objeto persona. Podemos aceptar este abuso del lenguaje si recordamospella que persona1 es de hecho la dirección de un persona y no el objeto persona él mismo.
Dijimos que un objeto persona tenía dos propiedades nombre y edad. ¿Cómo se pueden aprovechar estas propiedades? Utilización de la notación objeto.propiedad como se ha explicado anteriormente. Así que
personne1.nom designa el nombre de la persona 1 y personne1.age edad. He aquí una breve ilustración:
Programa | Resultados |
![]() |
El programa anterior podría modificarse del siguiente modo:
Programa | Resultados |
![]() |
Hemos utilizado el con ... fin con que puede utilizarse para "factorizar" nombres de objetos en expresiones. La estructura con p1 ... fin con en las líneas 9-12 y 15-18, puede utilizar la sintaxis .nombre en lugar de p1.nom y .edad en lugar de p1.age. Esto facilita la escritura de instrucciones en las que se utiliza repetidamente el mismo nombre de objeto.
3.12. Asignar un valor a una variable
Existen dos instrucciones para asignar un valor a una variable:
- variable=expresión
- set variable=expresión
La forma 2 está reservada a las expresiones cuyo resultado es una referencia a un objeto. Para todos los demás tipos de expresiones, la forma 1 es la adecuada. La diferencia entre las dos formas es la siguiente:
- en la instrucción variable=expresióna cada variable se le asigna un valor. Si v1 y v2 son dos variables, al escribir v1=v2 se asigna el valor de v1 a v2. Por tanto, se duplica un valor en dos lugares distintos. Si el valor de v2 se modifica posteriormente, el de v1 no.
![]() |
- en la instrucción set variable=expresióna una variable se le asigna como valor la dirección de un objeto. Si v1 y v2 son dos variables y v2 es la dirección de un objeto obj2, al escribir set v1=v2 se asigna el valor de v1 a v2, y por tanto la dirección del objeto obj2. Cuando el script manipula entonces v1 y v2, no son los "valores" de v1 y v2 los que se manipulan, sino los objetos "apuntados" por v1 y v2, es decir, el mismo objeto aquí. Decimos que v1 y v2 son dos referencias al mismo objeto y que manipular este último a través de v1 o v2 no supone ninguna diferencia. En otras palabras, modificar el objeto referenciado por v2 modifica el objeto referenciado por v1.
![]() |
He aquí un ejemplo:
Programa | Resultados |
![]() |
3.13. Évalorar expresiones
Los principales operadores para evaluar expresiones son :
Tipo de operador | Operadores | Ejemplo |
Aritmética | +,-,*,/ | |
mod | a mod b da el resto de la división entera de a por b. Antes, a y b se transformaban en enteros si era necesario. | |
\ | a b da el cociente de la división entera de a por b. Anteriormente, a y b se transformaban en enteros si era necesario. | |
^ | a^b eleva a a la potencia b. Así que a^2 es igual a a2 | |
Comparación | <,<= >, >= =,<> | a<>b es verdadera si a es diferente de b a=b es verdadera si a es igual a b a y b pueden ser números o cadenas. En este último caso, cadena1<cadena2 si en orden alfabético cadena1 precede a cadena2. En la comparación de cadenas, las mayúsculas preceden a las minúsculas en orden alfabético. |
es | obj1 es obj2 es verdadero si obj1 y obj2 son referencias al mismo objeto. | |
Lógica | y, o, no, xor | Los operandos aquí son todos booleanos. bool1 o bool2 es verdadero si bool1 o bool2 es verdadero bool1 y bool2 es verdadero si bool1 y bool2 son verdaderos no bool1 es verdadero si bool1 es falso y viceversa bool1 xor bool2 es verdadero si sólo uno de los booleanos bool1, bool2 es verdadero |
Concatenación | &, + | No es aconsejable utilizar el operador + para concatenar dos cadenas porque puede confundirse con la suma de dos números. Por lo tanto, debe utilizarse exclusivamente el operador &. |
3.14. Control de la ejecución del programa
3.14.1. Exejecutar acciones condicionalmente
La instrucción vbscript que permite realizar acciones en función del valor verdadero/falso de una condición es la siguiente:
La expresión expresión se evalúa en primer lugar. Esta expresión debe tener un valor booleano. Si es verdadera, las acciones de la entonces se ejecutan, de lo contrario, el si no si está presente. |
A continuación, un programa presenta distintas variantes de if-then-else :
Programa | Resultados |
![]() |
Comentarios :
- en vbscript, puede escribir instrucción1:instrucción2:... instrucciónn en lugar de escribir una instrucción por línea. Esta posibilidad se ha explotado en la línea 10, por ejemplo.
3.14.2. Execute acciones repetidamente
Bucle con un número conocido de iteraciones |
Puede salir de un bucle for en cualquier momento con la tecla salida para. |
Bucle con número desconocido de iteraciones |
Puede salir de un bucle do while en cualquier momento con la instrucción salir hacer. |
El programa que figura a continuación ilustra estos puntos:
Programa |
![]() |
Resultados |
Nota en la fase de desarrollo de un programa, no es infrecuente que éste ejecute un "bucle", c.a.d. que nunca se detiene. En general, el programa ejecuta un bucle cuya condición de salida no se puede verificar, como en el siguiente ejemplo:
' bucle infinito
i=0
Do While 1=1
i=i+1
wscript.echo i
Loop
' otro del mismo tipo
i=0
Do While true
i=i+1
wscript.echo i
Loop
Si ejecutas el programa anterior, el primer bucle nunca se detendrá por sí solo. Puede forzarlo a detenerse escribiendo CTRL-C del teclado (pulse CTRL y la tecla C al mismo tiempo).
3.14.3. Finalizar la ejecución del programa
Instrucciones wscript.quit n termina la ejecución del programa devolviendo un código de error igual a n. En DOS, este código de error puede comprobarse con la sentencia if ERRORLEVEL n, que es verdadera si el código de error devuelto por el último programa ejecutado es >=n. Considere el siguiente programa y sus resultados:
![]() |
Inmediatamente después de ejecutar el programa, se emiten los siguientes tres comandos DOS:
El comando DOS 1 comprueba si el código de error devuelto por el programa es >=5. En caso afirmativo, muestra (echo) 5. En caso contrario, nada. Si es así, muestra (echo) 5, de lo contrario nada.
El comando DOS 3 comprueba si el código de error devuelto por el programa es >=4. En caso afirmativo, muestra 4; en caso contrario, nada.
El comando DOS 5 comprueba si el código de error devuelto por el programa es >=3. En caso afirmativo, muestra 3. En caso contrario, nada. En caso afirmativo, muestra 3; en caso contrario, nada.
De los resultados mostrados, podemos deducir que el código de error devuelto por el programa fue 4.
3.15. Las tablas de datos en una variante
Una variante T puede contener una lista de valores. Se dice entonces que es una matriz. Una matriz T tiene varias propiedades:
- se accede al elemento i de la matriz T mediante la sintaxis T(i) donde i es un número entero con un índice entre 0 y n-1 si T tiene n elementos.
- podemos averiguar el índice del último elemento de la matriz T utilizando la expresión ubound(T). El número de elementos de la matriz T es entonces ubound(T)+1. Este número suele denominarse tamaño de la matriz.
- una variante T puede inicializarse con una matriz vacía utilizando la sintaxis T=array() o con una secuencia de elementos utilizando la sintaxis T=array(elemento0, elemento1, ...., elementon)
- se pueden añadir elementos a un array T ya creado. Para ello, utilice la función redim preservar T(N) donde N es el nuevo índice del último elemento de la matriz T. La operación se denomina redimensionamiento (redim). La palabra clave conservar indica que el contenido actual de la matriz debe conservarse al cambiar de tamaño. En ausencia de esta palabra clave, T se redimensiona y se vacía de sus elementos.
- un elemento T(i) de la matriz T es de tipo variante y, por tanto, puede contener cualquier valor y, en particular, una matriz. En este caso, la notación T(i)(j) designa el elemento j de la matriz T(i).
Estas diversas propiedades de las tablas se ilustran con el siguiente programa:
Programa | Resultados |
![]() |
Comentarios
- hemos utilizado una función llamada join se explica a continuación.
3.16. Las variables de matriz
Hay otra forma de usar un array en vbscript, que es usar una variable array. A diferencia de las variables escalares, una variable de matriz debe declararse con un carácter sol. Son posibles varias declaraciones :
- dim array(n) declara una matriz estática de n+1 elementos numerados de 0 a n. Este tipo de matriz no se puede redimensionar
- dim array() declara un array dinámico vacío. Tendrá que ser redimensionado para ser utilizado por la instrucción redim de la misma manera que para una variante que contenga un array
- dim array(n,m) declara una matriz bidimensional de (n+1)*(m+1) elementos. El elemento (i,j) de la matriz se denota por tabla(i,j). Obsérvese la diferencia con una variante en la que se habría marcado el mismo elemento tabla(i)(j).
¿Por qué hay dos tipos de tabla que al final son muy similares? La documentación de vbscript no lo dice, ni indica si una funciona mejor que la otra. En lo que sigue, utilizaremos casi exclusivamente la matriz en una variante en nuestros ejemplos. Sin embargo, recuerde que VBscript deriva del lenguaje Visual Basic, que contiene datos tipados (integer, double, boolean, etc.). En este caso, si necesita utilizar una matriz de números reales, por ejemplo, la variable matriz será más eficiente que la variable variante. En este caso, declare algo como dim tableau(1000) as double para declarar una matriz de números reales o simplemente dim tableau() as double si la tabla es dinámica.
He aquí un ejemplo de utilización de variables de tabla:
Programa | Resultados |
![]() |
3.17. Las funciones split y join
Las funciones split y join pueden utilizarse para cambiar entre cadenas y matrices:
- Si T es una matriz y porque una cadena de caracteres, join(T,coche) es una cadena de caracteres formada por la combinación de todos los elementos de la matriz T, cada uno separado del siguiente por la cadena porque. Así, join(array(1,2,3), "abcd") dará la cadena "1abcd2abcd3"
- Si C es una cadena de caracteres formada por una serie de campos separados por la cadena porque la función split(C,car) es una matriz cuyos elementos son los diferentes elementos de la cadena C. Así split("1abcd2abcd3", "abcd") dará el array (1,2,3)
He aquí un ejemplo:
Programa | Resultados |
3.18. Diccionarios
Se puede acceder al elemento de una matriz T cuando se conoce su número i. Se puede acceder a él utilizando la notación T(i). Existen matrices a cuyos elementos no se accede por un número, sino por una cadena de caracteres. El ejemplo típico de este tipo de matrices es el diccionario. Cuando buscamos el significado de una palabra en "Larousse" o "Le petit Robert", accedemos por la palabra. Este diccionario podría representarse mediante una matriz con 2 columnas:
palabra1 | descripción1 |
palabra2 | descripción2 |
palabra3 | descripción3 |
.... |
Entonces podríamos escribir cosas como:
diccionario("palabra1")="descripción1"
diccionario("palabra2")="descripción2"
...
Esto es similar al funcionamiento de un array, salvo que los índices del array no son enteros, sino cadenas de caracteres. Este tipo de matriz se denomina diccionario (o matriz asociativa, hashtable) y los índices de cadena el llaves del diccionario (claves). Los diccionarios se utilizan con mucha frecuencia en el mundo de la informática. Todos tenemos una tarjeta de la Seguridad Social con un número. Este número nos identifica de forma única y da acceso a información sobre nosotros. En el modelo diccionario("clave")="información", aquí "clave" sería el número de la Seguridad Social e "información" sería toda la información almacenada sobre nosotros en los ordenadores de la Seguridad Social.
Windows utiliza un objeto Active X denominado "Scripting.Dictionary"Active X" es un componente de software que expone una interfaz que puede ser utilizada por programas. Un objeto Active X es un componente de software que expone una interfaz que puede ser utilizada por programas escritos en distintos lenguajes, siempre que cumplan la norma de uso de objetos Active X. Por tanto, el objeto Scripting.dictionary puede ser utilizado por lenguajes de programación Windows: javascript, per, python, C, C++, vb, vba, etc., no sólo vbscript.
1 | Un objeto Scripting.Dictionary es creado por un set dico=wscript.CreateObject("Scripting.Dictionary") o simplemente set dico=CreateObject("Scripting.Dictionary") CreateObject es un método del objeto WScript utilizado para crear instancias de objetos Active X. La versión 2 muestra que wscript puede ser un objeto implícito. Cuando un método no puede "emparejarse" con un objeto, el contenedor WSH intentará emparejarlo con el objeto wscript. |
2 | Una vez creado el diccionario, podemos añadirle elementos mediante el método add: dico.add "clave",valor creará una nueva entrada en el diccionario asociada a la clave "key". El valor asociado es una variante de cualquier dato. |
3 | Para recuperar el valor asociado a una clave determinada, utilice la función artículo en el diccionario : var=dico.item("clé") o set var=dico.item("clave) si el valor asociado a la clave es un objeto. |
4 | Todas las claves del diccionario pueden recuperarse en una matriz variable utilizando la función llaves : keys=dico.keys llaves es una matriz cuyos elementos se pueden recorrer. |
5 | Todos los valores del diccionario pueden recuperarse en una matriz variable utilizando la función artículos : valeurs=dico.items artículos es una matriz cuyos elementos se pueden recorrer. |
6 | La existencia de una clave puede comprobarse mediante la función existe : dico.exists("clé") es verdadero si la clave "clé" existe en el diccionario |
7 | Puede eliminar una entrada del diccionario (clave+valor) utilizando la función eliminar : dico.remove("clé") elimina la entrada del diccionario asociada a la clave "key". dico.removeall elimina todas las claves, c.a.d. vacía el diccionario. |
El siguiente programa utiliza estas distintas posibilidades:
Programa |
|
Resultados |
|
3.19. Ordenar una tabla o un diccionario
Es común querer ordenar un array o un diccionario en orden ascendente o descendente de sus valores o de sus claves para un diccionario. Mientras que la mayoría de los lenguajes tienen funciones de ordenación, vbscript no parece tener ninguna. Esto es un defecto.
3.20. Los argumentos de un programa
Puede llamar a un programa vbscript pasándole parámetros, como en :
Esto permite al usuario pasar información al programa. ¿Cómo recupera el programa esta información? Veamos el siguiente programa:
Programa | Resultados |
![]() |
Comentarios
- WScript.Arguments es la colección de argumentos pasados a script
- una colección C es un objeto que tiene
- una propiedad cuente que es el número de elementos de la colección
- un método C(i) que da el elemento i en la colección
3.21. Una primera aplicación: IMPOTS
Queremos escribir un programa para calcular los impuestos de un contribuyente. El caso simplificado es el de un contribuyente que sólo tiene que declarar su sueldo:
- se calcula el número de acciones de los empleados nbParts=nbEnfants/2 +1 si no están casados, nbEnfants/2+2 si está casado, dónde nbEnfants es el número de hijos.
- calcule su base imponible R=0,72*S donde S es su salario anual
- calcula tu coeficiente familiar Q=R/N
el impuesto I se calcula a partir de los siguientes datos
12620.0 | 0 | 0 |
13190 | 0.05 | 631 |
15640 | 0.1 | 1290.5 |
24740 | 0.15 | 2072.5 |
31810 | 0.2 | 3309.5 |
39970 | 0.25 | 4900 |
48360 | 0.3 | 6898.5 |
55790 | 0.35 | 9316.5 |
92970 | 0.4 | 12106 |
127860 | 0.45 | 16754.5 |
151250 | 0.50 | 23147.5 |
172040 | 0.55 | 30710 |
195000 | 0.60 | 39312 |
0 | 0.65 | 49062 |
Cada línea tiene 3 campos. Para calcular el impuesto I, busque la primera línea donde QF<=champ1. Por ejemplo, si QF=30000 encontraremos la línea
El impuesto I es igual a 0.15*R - 2072.5*nbParts. Si QF es tal que la relación QF<=champ1 nunca se verifica, entonces se utilizan los coeficientes de la última línea. En este caso :
lo que da el impuesto I=0,65*R - 49062*nbParts.
El programa es el siguiente:
Programa | ||
| ||
Resultados | ||
|
Comentarios :
- el programa utiliza lo que ya se ha explicado (declaración de variables, argumentos, cambios de tipo, pruebas, bucles, array en una variante)
- no comprueba la validez de los datos, lo que sería anormal en un programa real
- sólo el bucle while presenta una dificultad. Intenta determinar el índice i del array limites para el que tenemos limites(i)>qf y este para i<ubound(limites) (c.a.d. aquí i<13) porque el último elemento del array limites no es significativo. Sólo se ha añadido para que el [Visite En i<ubound(límites) Y qf>limites(i)] para i=13. La prueba es entonces 13<13 y qf>limites(13) y entonces (en vbscript) debe existir limits(13). Al salir del bucle while, se utiliza el último valor de i calculado para calcular el impuesto: [impot=int(ingresos*coeffr(i)-nbParts*coeffn(i))].









































