Informatica Grafica
C A P I T U L O 3 Cadenas de Caracteres

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.




Ejemplo 3-1.
0
% ser cadena1 pepe
pepe
% set cadena2 $cadena1
pepe
% set cadena4 manolo
manolo
string compare $cadena1 $cadena2
0
string compare $cadena1 $cadena3
1
% string index $cadena1 2
p
% string length $cadena1
4 % string range $cadena3 0 3
mano
% string toupper cadena3
MANOLO


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.

Ejemplo 3-2.
% set uno 123

123

% set dos 234

$ set tres 789

789

% append juntos $uno $dos $tres

123456789

% set juntos

123456789



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.




Ejemplo 3-3.

% format "%#x" 20
0x14
% format "%#08x" 20
0x000014 % format "%-20s %3d" Label 2 Label 2
% format ·%6.2f %6.2d" 1 1
1.00 01
% set fh "10-12-87 12:35"
10-12-87 12:35
$ set v1 100
100
% set v2 42
42
% format "%-16s %-5s %-5s" $fh $v1 $v2
10-12-87 12:35 100 42
% format "%-16s %-5s %-5s" $fh $v1 $v2
10-12-87 12:35 100 42
% format "%-16s %-5s %-5s" $fh $v1 $v2
10-12-87 12:35 100 42




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.

Ejemplo 3-4.

% string match a* alfalfa
1
% string match a* lfalfa
0
% string match ?? ab
1
% string match ?? abc
0
% string match {[ab] *} pepe
0
% string match {[ab] *} abadia
1
% string match {[ab] *} bombilla
1
% string match {[ab] *x} bxcv 0
% string match {[ab] *x} box
1
% string match {*\?} que?
1


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.

Tabla 3-4. Sintaxis de las expresiones regulares.

.

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.

Ejemplo 3-5.
set patron {([0-9]+)*([H|h|M|S|s|m|d])}
if { [regexp $patron $temp1 total valor unidad] == 1 } {
# Si se cumple la condición...
}


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.

Si temp1, tuviera el valor 12H, total valdría 12H, valor 12 y unidad H.

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.

Previous Page Next Page


© 1995-98, etsimo WWW team
Última modificación: 19 de Agosto de 1998 - 17:49:51