Entrada de Datos. TCL
SOLUCIONARIO
Entrada de Datos. TCL
2026-06-28
Por
Occam's Razor

Entrada de Datos en TCL

#!/usr/bin/tclsh

puts -nonewline "Introduce dos numeros separados por un espacio ? "
flush stdout
scan [gets stdin] "%d %d" n t
puts "Has introducido $n y $t"

puts "Introduce 10 numeros separados por espacios?"
set a [ split [gets stdin] " "]

puts "Has introducido : "
foreach i $a {
    puts -nonewline "$i "
}
flush stdout

TCL nos ofrece una función similar a la función scanf de C para leer valores desde del usuario. En este casi, la función scan de TCL sería realmente equivalente a la función C sscanf puesto que se aplica sobre cadenas de caracteres.

SOY NOVATO
scan retorna el número de valores que ha conseguido convertir, lo cual se puede utilizar para determinar si la entrada del usuario es correcta. Una particularidad de scan es que si no puede convertir un determinado valor, la variable designada para almacenar ese valor no se modifica, es decir, mantiene el valor asignado previamente.

set n [[gets stdin] “%d %d” n t]

Esta línea almacenará en n cuantos valores ha sido capaz de leer.

 

TCL nos ofrece así mismo una función split, como la que hemos visto en otros lenguajes, que nos permite trocear una cadena de caracteres en una matriz de una sola tacada. Como sucede con Perl o Bash, en TCL todas las variables son cadenas de caracteres así que no es necesario ningún tipo de conversion.

En el caso de que necesitemos comprobar que los valores introducidos son numéricos, TCL ofrece el comando string is. La forma de usarlo es muy sencilla:

if {[string is integer -strict $valor]} {
    puts "Valor entero"
} else {
    puts "Valor no entero"
}

El flag -strict utilizado en el programa anterior hace que una cadena vacía se interprete como un 0. Si no lo usamos, el resultado sería 1.

SOY NOVATO

El primer parámetro del comando string is se conoce como clase y nos indica que tipo de datos queremos comprobar, lo que incluye una amplia gama de opciones. integer y double son las opciones más obvias, pero existen otras como entier (entero arbitrariamente largo), boolean o alnum para caracteres alfanuméricos (letras y números).

En caso de que queramos ofrecer mensajes de error más detallados, string is ofrece un segundo flag llamado -failindex el cual nos va a permitir recuperar el índice dentro de la cadena en el que se ha producido el error de conversión. El siguiente código ilustra su uso.

set s  "123abc"

if {![string is integer -strict -failindex indx $s]} {
    puts "No un entero"
    puts "Error en indice $indx"
}

El programa anterior nos indicará que la conversión a entero de la cadena de entrada 123bc ha fallado en el índice 3 (la letra a).

Resumen

  • TCL trabaja sobre cadenas así que la única forma de leer datos por el usuario es como una cadena de texto
  • El comando scan nos permite extraer valores numéricos muy fácilmente de una cadena de caracteres.
  • El comando string is nos permite validar cadenas de caracteres contra tipos de datos como enteros o números decimales entre otros.

SOBRE Occam's Razor
Somos una revista libre que intenta explicar de forma sencilla conceptos tecnológicos y científicos de los que no podemos escapar. Al final, todo es más fácil de lo que parece!

 
Tu publicidad aquí :)