El comando string
Los strings (cadenas de caracteres) son el tipo de dato básico de Tcl. Es por ello por lo que existen un gran número de comandos para manipularlos.
La sintaxis general del comando string es la siguiente:
string operacion valor_string otros_args
El primer argumento determina qué es lo que va a hacer, el segundo es el string sobre el que se va a realizar la operación, el resto son argumentos que dependen de la operación a realizar.
Tabla 3-1. El comando string
|
string compare string1 string2 |
Compara dos strings. 0 si son iguales, 1 si una es una subcadena de la otra, -1 en otro caso. |
|
string index string index |
Devuelve el caracter situado en el indice indicado. |
|
string length string |
Devuelve la longitud del string. |
|
string match patter string |
Devuelve 1 si hay coincidencias, 0 si no. |
|
string range string i j |
Devuelve los caracteres entre i y j. |
|
string tolower string |
Pasa a minúsculas el string. |
|
string toupper string |
Pasa a mayúsculas el string. |
El comando append
Este comando toma como primer argumento una variable y le concatena el resto de argumentos. La variable será creada si no existía.
El comando format
El comando format es similar en su funcionamiento al comando de C printf. Es decir, permite dar formato a una cadena de texto de acuerdo con unas especificaciones de formato.
Su sintaxis es la siguiente:
format
spec valor1 valor2 ...El argumento spec (que es el formato propiamente dicho) puede incluir especificación de formato para distintas variables (valor1, valor2, ...). El formato para cada variable se inicia con el símbolo "%". Además, el valor de la variable (siempre string) puede ser convertido, sólo para su representación, a valores enteros, en coma flotante, hexadecimales, octales, etc.
Tabla 3-2. Indicadores de conversión.
|
d |
entero con signo. |
|
u |
Entero sin signo. |
|
i |
Entero con signo. El argumento puede ir en hexadecimal(0x) o en octal(0). |
|
o |
Octal sin signo. |
|
x o X |
Hexadecimal sin signo. |
|
c |
Carácter ASCII de un entero. |
|
s |
String. |
|
f |
Número en coma flotante en formato a.b. |
|
e o E |
Número en coma flotante en notación científica, a.bE+-c. |
|
g o G |
Número en coma flotante. |
Por otro lado, existen una serie de flags de formato, que permiten hacer algunas modificaciones en cuanto a la forma del texto de salida, tales como justificar a izquierda o derecha, rellenar con ceros, etc.
Tabla 3-3. Flags de formato.
|
- |
Justificar a la izquierda el campo. |
|
+ |
Incluir signo. |
|
espacio |
Número precedido de un espacio. |
|
0 |
Rellenar con ceros. |
|
# |
Coloca un 0 para octal y un 0x para hexadecimal. Incluye un punto decimal. |
El comando scan
El comando scan es similar al sscanf de C. Guarda en una variable una cadena formateada con el formato especificado. Su sintaxis es la siguiente.
scan string formato var ?var? ?var? ...
Los formatos que scan admite, son los mismos que para el comando format.
El comando string match
El comando string match permite comparar strings con un patrón dado. Para ello se utilizan tres posibles constructores del patrón. Equivale a los caracteres comodín del DOS
En caso de encontrar alguna coincidencia entre el string y el patrón dado, devolverá un 1, en caso contrario 0.
Como se puede ver en los dos últimos casos, si se desea usar como patrón uno de los caracteres reservados, en este caso "?", debe de colocarse una barra inclinada para indicarle al intérprete que lo considere como patrón, no como carácter reservado.
De los ejemplos puede deducirse que existirán infinitas combinaciones entre estos tres tipos de patrones anteriormente descritos.
Expresiones regulares
Es similar a lo anteriormente explicado pero mucho más potente, ya que no sólo comprueba la similitud entre el patrón y el string (filtra), sino que puede extraer el "substring" que concuerda con el patrón dado.
El patrón de filtrado es una secuencia de caracteres, de carácter de comparación de string match (*, ? , [] ), carácter de repetición, carácter de alternancia o un subpatrón entre paréntesis.
|
. |
Filtra algún carácter. |
|
* |
Filtra cero o más. |
|
+ |
Filtra uno o más. |
|
? |
Filtra cero o uno. |
|
( ) |
Grupos de subpatrones. |
|
| |
Alternancia. |
|
[ ] |
Conjunto de caracteres ASCII. Un rango se especifica [x-y] . |
|
Ù |
|
|
$ |
El comando regexp
El comando regexp permite tener acceso al manejo de las expresiones regulares. Su sintaxis es:
regexp
?flags? patron string ?match sub1 sub2 ... ?Devolverá 1 si alguna parte del string coincide con el patrón de filtrado, 0 en otro caso.
Los flags son opcionales.
El argumento patron es una expresión regular tal como se ha descrito en el apartado anterior.
El anterior ejemplo es un trozo de código, en el que se intenta obtener los datos de una cadena con el formato "NúmeroCaracter". Un ejemplo sería 3H, 5s, 12d. Para ello se construye primeramente una expresión regular que se guarda en la variable denominada patron. A la expresión regular se le pasan como parámetros el propio patrón, la variable temp1, donde se almacena lo que se desea filtrar con la expresión regular; la variable total, en la que se almacenará, una vez ejecutada la función, el contenido de temp1; una variable denominada valor, donde se va a almacenar el número extraído de temp1, y unidad donde se almacenará el carácter.
El patrón está formado por dos secciones, la primera para el número y la segunda para el carácter, separadas por el signo "*". Respecto al número es un conjunto que va de 0 a 9, y que puede haber repetición (indicado por el signo "+"), es decir, varios números (12H es válido). En cuanto al carácter, sólo puede ser H,h,M.S,s,m o d, y no puede haber más de uno.
Esto es útil cuando se desea extraer datos de una cadena de la que se conoce que cumple unas determinadas reglas de formato, como por ejemplo las fechas, matrículas de coches, NIF, etc.