Lenguaje de programación TCL Pedro J. Muñoz Merino http://www.it.uc3m.es/pedmume/ Indice ● Introducción ● Estructura de un programa de TCL ● Variables ● Manipulación de strings ● Listas y Arrays ● Aritmética ● Estructuras de control ● Entrada/Salida ● Introducción a la programación Web con el AOLServer Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 2 Estructura de un programa TCL ● Un conjunto de invocaciones a comandos. Cada línea es una invocación. Para definir nuevos comandos que puedan ser invocados se realiza con proc ― El comando puede retornar algún valor con la palabra reservado return ― Si no hay un return, entonces se devuelve lo que retorne el último comando ejecutado ― Los parámetros de un comando pueden ser lo que retornan otros comandos. Este tipo de invocaciones deben ir entre [ ] proc nombre_comando {param1 param2 … paramn} { comandos_de_TCL return var } Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 3 Variables ● Definición de variables y establecimiento de valor ― ● set nombre_var valor Recuperación de valores de variables ― set nombre_var ― $nombre_var Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 4 Caracteres que se escapan ● Hay ciertos caracteres que no se interpretan literalmente dentro de un string, como por ejemplo ― $ que significa el valor de una variable ― [ ] que significa la ejecución de un determinado comando ● Para interpretarlos literalmente hay que poner delante el carácter \ ● Un string puede ir ― Sin comillas. En cuanto hay un espacio en blanco se interpreta como un parámetro de un comando ― Con comillas dobles. El espacio en blanco se interpreta tal cual Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 5 Ámbito de las variables ● Local a un procedimiento. Este es el ámbito por defecto ● Globales a un Thread. Se declaran con la palabra reservada global. Y en cada procedimiento que se utilice hay que poner dicha palabra reservada ● Globales a todos los Threads. Se declaran con la palabra reservada ns_share (Esto es algo del servidor AOLServer) Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 6 Operaciones con Strings (I) ● Operadores que no empiezan por string ― append variable_name value1 value2 value3 ... valueN ― regexp ?switches? expression string ?matchVar? ?subMatchVar subMatchVar ...? ― A lo que tenía la variable se le añaden los strings de los valores pasados Se testea si la expresión hace match con el string pasado y luego se devuelven diferentes strings según el match realizado regsub ?switches? expression string substitution_spec result_variable_name Se testea si la expresión hace match con el string pasado y en tal caso se procede a realizar la sustitución oportuna Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 7 Operaciones con Strings (II) ● Operadores empiezan por string ― string compare string1 string2 ― string first string1 string2 ― string last string1 string2 ― string match pattern string ― string range string i j ― string tolower string ― string toupper string ― string trim string ?chars? ― string trimleft string ?chars? ― string trimright string ?chars? ― string wordend string index Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 8 Operaciones con Strings (III) ● Forma de establecer los diferentes patrones para hacer matching ― . Un sólo caracter que puede ser cualquiera ― * Cero o más caracteres que pueden ser cualquiera ― + Uno o más caracteres que pueden ser cualquiera ― ? Igual que * ― | ― () Agrupa un subpatrón ― [] Delimita un conjunto específico de caracteres. Si va el ^ delante entonces es el conjunto inverso ― ^ Patrón sólo al principio ― $ Patrón sólo al final Actua como un OR lógico para coger un patrón u otro Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 9 Listas ● Listas: Contienen un número indefinido de elementos, que pueden ser números, strings u otras listas. ― list par1 par2 … parn : Crea una nueva lista ― lappend nombre_lista par1 par2 ... parn: Añade elementos al final de una lista ― linsert nombre_lista index par1 par2 ... parn: Añade elementos a una lista existente justo en la posición antes del índice especificado ― lreplace nombre_lista n1 n2 par1 par2 ... parn: Reemplaza los elementos de la lista en las posiciones de n1 a n2 por los parámetros especificados ― lindex nombre_lista n : Obtiene el elemento n de la lista ― lrange nombre_lista n1 n2: Obtiene elementos desde n1 a n2 ― llength nombre_lista : Obtiene la longitud de la lista ― lsearch mode nombre_lista value : Busca un elemento según su valor y modo ― concat lista1 lista2... Listn : Concatena varias listas ― join nombre_lista joinString : Produce un string de los elementos de la lista ― split string splitChars : Produce una lista de un string Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 10 Arrays ● Arrays: Son tablas hash que asocian diferentes claves con sus valores ― Nombre_array(clave)=valor : Para asignar diferentes valores a un array dependiendo de su clave. Sirve tanto para definir una nueva clave de array o para sobreescribir su valor Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 11 Aritmética ● Se evalua con el comando expr ● expr evalua una expresión aritmética y devuelve su valor set i 1 i= expr i + 1 Pedro J. Muñoz Merino “2” Diseño de Aplicaciones Telemáticas 12 Estructuras de Control ● if ● switch ● while ● foreach ● for Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 13 Entrada/Salida ● TCL tiene un interfaz para manipular ficheros, que permite: ― Características del fichero, como extensión, fecha de creación, si es ejecutable o no, etc. ― Abrir el fichero ― Leer del fichero ― Escribir en el fichero ― Otras llamadas de manipulación de ficheros, como para posicionar el puntero por donde se va leyendo o escribiendo Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 14 Introducción a la programación Web de AOLServer ● AOLServer dispone de una serie de librerías para la programación Web ― Analogía con servlets y JSPs en J2EE, sería aquí ficheros TCL y ADP ● Suelen empezar por ns_ aquellas utilidades de AOLServer relacionadas con la programación Web basada en TCL ● Las utilidades y su descripción se encuentran en: ― http://aolserver.com/docs/ Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 15 Introducción a la programación Web de AOLServer ● Algunos comandos útiles iniciales ― Recibir información de peticiones: ns_conn ― Escribir datos en la respuesta: ns_write ― Devolver petición: ns_return, ns_returnredirect ― Bases de datos: ns_db ― Realización de petición HTTP: ns_httpget ― Envío de email: ns_sendmail ― Variable global compartida en múltiples hilos: ns_share ― Arrays: ns_set ― Lista de los links <A> : ns_hrefs ― Logs: ns_log ― Información sobre el servidor: ns_server ― Devuelve el tiempo del servidor: ns_time ― Codificación de caracteres: ns_urlencode Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 16 Trabajo propio del alumno asociado a la sesión ● TCL for Web nerds, http://philip.greenspun.com/tcl/ Pedro J. Muñoz Merino Diseño de Aplicaciones Telemáticas 17